Scala 字符串串联函数
假设有3个字符串:Scala 字符串串联函数,scala,Scala,假设有3个字符串: protein, starch, drink 将这些连接起来,我们可以说晚餐是什么: 例如: val protein = "fish" val starch = "chips" val drink = "wine" val dinner = protein + ", " + starch + ", " + drink 但是如果因为我妻子抓不到任何东西而丢失了一些东西,比如蛋白质,那该怎么办呢。然后,我们晚餐吃:、薯条、饮料 有一种巧妙的方法可以连接字符串以选择性地添加逗
protein, starch, drink
将这些连接起来,我们可以说晚餐是什么:
例如:
val protein = "fish"
val starch = "chips"
val drink = "wine"
val dinner = protein + ", " + starch + ", " + drink
但是如果因为我妻子抓不到任何东西而丢失了一些东西,比如蛋白质,那该怎么办呢。然后,我们晚餐吃:、薯条、饮料
有一种巧妙的方法可以连接字符串以选择性地添加逗号-我只是不知道它是什么;-)。有人有好主意吗
我要找的东西是:
val dinner = protein +[add a comma if protein is not lenth of zero] + starch .....
这只是我正在做的一个有趣的运动,所以现在如果不能用凉爽的方式来做的话,就出汗吧。我之所以尝试在单个赋值中执行条件连接,是因为我在XML中经常使用这种类型的东西,一个好的解决方案会使事情。。。。。更好。当你说“它可能不存在”时,这个实体的类型应该是选项[T]
。那么
def dinner(components: List[Option[String]]) = components.flatten mkString ", "
您可以这样调用它:
scala> dinner(None :: Some("chips") :: Some("wine") :: Nil)
res0: String = chips, wine
如果您确实想检查字符串的空白
def dinner(strings: List[String]) = strings filter {_.nonEmpty} mkString ", "
scala> dinner("" :: "chips" :: "wine" :: Nil)
res1: String = chips, wine
您可能正在寻找有关收藏的mkString
val protein = "fish"
val starch = "chips"
val drink = "wine"
val complete = List (protein, starch, drink)
val partly = List (protein, starch)
complete.mkString (", ")
partly.mkString (", ")
结果:
res47: String = fish, chips, wine
res48: String = fish, chips
您甚至可以指定起点和终点:
scala> partly.mkString ("<<", ", ", ">>")
res49: String = <<fish, chips>>
scala>party.mkString(“”)
res49:字符串=
这将处理空字符串的情况,并显示如何放置用于筛选和格式化的其他逻辑。这对于List[String]
来说很好,并且可以推广到List[Any]
val input = List("fish", "", "chips", 137, 32, 32.0, None, "wine")
val output = input.flatMap{ _ match {
case None => None
case x:String if !x.nonEmpty => None
case x:String => Some(x)
case _ => None
}}
.mkString(",")
res1: String = fish,chips,wine
其思想是flatMap
获取一个列表[Any]
,并使用匹配为不希望保留在输出中的任何元素分配None
。没有人被压扁,有些人留下来
如果您需要能够处理不同的类型(Int、Double等),那么您可以添加更多的情况。Scala有非空
,Java 1.6有isEmpty
。。。当你只想知道字符串是否为空时,为什么还要比较长度呢?谢谢!我已经更改了答案。@Luigipling肯定它更简洁,但您描述的是如何测试条件,而不是告知条件是什么。@Luigipling说得简洁,我不同意。:-)@DanielC.Sobral isEmpty是字符串的本地语言;NoneEmpty是一个昂贵的增强。谢谢,我从未见过*在Scala中使用。显示了我在Scala呆了多久。它有名字吗?提醒我C++中的指针。它被称为“重复的参数”在“楼梯书”(“Scala编程”由M. Odersky,L.Spon和B.VeNeNes)。我认为“变长论证”也不错。谢谢@AlexanderAzarov,这将教会我在阅读封面之前使用一本书作为参考。叶,在那里好的:第二版印刷本第156页,准确地说;-)不,它不起作用,如果protein
是空字符串,它将打印错误的内容。仅代码块不能提供好的答案。请添加解释(为什么解决问题,错误在哪里等…)
println(s"$protein,$starch,$drink")
println(s"$protein,$starch,$drink")