Scala字符串插值含下划线报错问题求助(Scala2.11.8+Spark2.2)
解决Scala字符串插值中
$startDt_$endDt的报错问题 嘿,我太懂你遇到的这个小坑了!在Scala的字符串插值语法里,下划线_属于合法的变量名组成部分,所以当你写s"$startDt_$endDt"时,Scala会误以为你要引用一个名为startDt_的变量——但你根本没定义这个变量,自然就报错啦。
给你两种简单的解决办法:
方法一:用大括号明确变量边界(推荐)
把插值变量用${}包裹,这样就能清晰区分变量名和后面的下划线:
val startDt = "20180405" val endDt = "20180505" val targetStr = s"${startDt}_$endDt" println(targetStr) // 输出:20180405_20180505
这种写法既简洁又符合Scala字符串插值的最佳实践,以后遇到变量名后面跟符号、字母的情况都可以这么用。
方法二:拆分字符串拼接
如果你觉得大括号不习惯,也可以把下划线单独作为字符串的一部分拼接起来:
val startDt = "20180405" val endDt = "20180505" val targetStr = s"$startDt" + "_" + s"$endDt"
不过这种写法相对繁琐,更推荐第一种方法。
另外提一句,你用的Scala 2.11.8版本完全支持这种大括号的写法,放心用就好~
内容的提问来源于stack exchange,提问作者user9074332
相关产品推荐
相关产品推荐

