scala 使用 '|' 作为分割字符时,报红线并提示 scala empty branch in alternation,使用 \\ 转义字符修饰后实现 '|' 的正常 String Split。
val word = "112345|2"
A.错误1: 转义字符用反
println(word.split("/|").mkString(","))
1,1,2,3,4,5,|,2
翻译字符为 '\' ,使用 '/' 后不会正确划分字符串
B.错误2: 直接用特殊字符
println(word.split("|").mkString(","))
1,1,2,3,4,5,|,2
直接使用 '|' 会出现引言中的提示 scala empty branch in alternation,导致分隔符为空间隔,所以都划分了一遍
对于特殊字符分割,需要使用 \\| 双转义字符:
println(word.split("\\|").mkString(","))
112345,2
Tips:
public String[] split(String regex) {
return split(regex, 0);
}
这里解释一下为什么 | 会分割错误,split 函数的参数 String regex,其实这里就是一个正则表达式,| 在这里代表或的作用,例如你可以同时使用两个分隔符分割字符串,因此使用 | 符号时要注意自己是否需要增加转义字符 :
val word = "1<2>3"
println(word.split("<|>").mkString(","))
1,2,3
除了 ‘|’ 外, * ^ . + ? $ ... 也需要使用转义字符:
val word = "1*2^3:4.5|6"
println(word.split("^").mkString("-2022-"))
println(word.split(".").mkString("-2022-"))
println(word.split("|").mkString("-2022-"))
可以看到这些字符直接 split 后会有很多奇怪的结果,要么不 split,要么啥也没有,要么一个一个分割,所以遇到这些奇怪的字符一定记得加 \\ 转义 ,+ ? 会直接报错,无法 split ,$ 后面标识变量,直接 split 也要注意。
1*2^3:4.5|6
1-2022-*-2022-2-2022-^-2022-3-2022-:-2022-4-2022-.-2022-5-2022-|-2022-6
观察下面 split 语法,只要 regex 显示不和字符串一个颜色 (没用编辑器另说= =),那这个符号大概率需要转义或者不能满足你的 split 需求,例如 ^ | 是红色,因为他们此时是逻辑运算符号,. 是黑色,都不是正常分割的字符。
加完 \\ 转义后,大家都正常了,NICE
val word = "1*2^3:4.5|6"
println(word.split("\\^").mkString("-2022-"))
println(word.split("\\.").mkString("-2022-"))
println(word.split("\\|").mkString("-2022-"))
1*2-2022-3:4.5|6
1*2^3:4-2022-5|6
1*2^3:4.5-2022-6
除了 '|' 分割符号外,还有一个常用的分隔符是 ’^A' ,该符号是 Hive 的默认分割符号,但是文本格式下无法显示,如果要对 '^A' 分割的字符串分割,可以使用 string.split('\001')