我正在尝试使用|
条分隔符拆分文本。 123.123.123.123|000.000.000.000
到每个ip地址块。但每个数字都不是由|
分割的。
scala> "123.123.123.123|000.000.000.000".split("|")
res30: Array[java.lang.String] = Array("", 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3, |, 0, 0, 0, ., 0, 0, 0, ., 0, 0, 0, ., 0, 0, 0)
scala> "123.123.123.123".split("|")
res33: Array[java.lang.String] = Array("", 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3, ., 1, 2, 3)
所以我将分隔符设为Char
,它显示了我的意图。
scala> "123.123.123.123|000.000.000.000".split('|')
res31: Array[String] = Array(123.123.123.123, 000.000.000.000)
scala> "123.123.123.123".split('|')
res32: Array[String] = Array(123.123.123.123)
为什么单个角色会有很大的不同?
我读过Scala doc和StringLike.scala,但没有回答。
def split(separators: Array[Char]): Array[String]
def split(separator: Char): Array[String]
感谢。
答案 0 :(得分:12)
Split方法接受string或字符。如果你使用字符串,它将被解释为正则表达式和“|”被视为正则表达式'或' - 在你的情况下它会回到'每个角色都进入它自己的垃圾箱'。逃避它有原始的分隔符:
"123.123.123.123|000.000.000.000".split("\\|")
res1: Array[String] = Array(123.123.123.123, 000.000.000.000)
字符分隔符按原样解释,因此您可以毫不费力地获得所需的结果
答案 1 :(得分:2)
请注意,正如om-nom-nom正确提到的那样(但没有提供示例),字符(包含在单'
中)也是有效的:
"123.123.123.123|000.000.000.000".split('|')
我发现这更明显/可读。我也假设这会更快,因为它不必调用正则表达式解析器。但这当然是猜测,也是不必要的微观优化。