6
我嘗試在斯卡拉REPL下面的代碼:拆分功能差異
"ASD-ASD.KZ".split('.')
res7: Array[String] = Array(ASD-ASD, KZ)
"ASD-ASD.KZ".split(".")
res8: Array[String] = Array()
爲什麼這個函數調用有不同的結果?
我嘗試在斯卡拉REPL下面的代碼:拆分功能差異
"ASD-ASD.KZ".split('.')
res7: Array[String] = Array(ASD-ASD, KZ)
"ASD-ASD.KZ".split(".")
res8: Array[String] = Array()
爲什麼這個函數調用有不同的結果?
功能使用有很大的不同。
split
的功能被重載,這是從Scala中的源代碼的實現:
/**對於該字符串中的每個行:
- 地帶包括一個主導前綴空白或控制字符
- 其次是
|
從行中。*/
def stripMargin: String = stripMargin('|')
private def escape(ch: Char): String = "\\Q" + ch + "\\E"
@throws(classOf[java.util.regex.PatternSyntaxException])
def split(separator: Char): Array[String] = toString.split(escape(separator))
@throws(classOf[java.util.regex.PatternSyntaxException])
def split(separators: Array[Char]): Array[String] = {
val re = separators.foldLeft("[")(_+escape(_)) + "]"
toString.split(re)
}
因此,當你有一個char調用split()
,你問的那個特定字符分割:
scala> "ASD-ASD.KZ".split('.')
res0: Array[String] = Array(ASD-ASD, KZ)
當你打電話用字符串split()
,這意味着你想要一個正則表達式。所以,爲你使用雙引號得到確切的結果,你需要做的:
scala> "ASD-ASD.KZ".split("\\.")
res2: Array[String] = Array(ASD-ASD, KZ)
其中:
\
將下列字符轉義\
轉義字符點這是一個正則表達式,我們想用它作爲字符.
- 將字符串拆分的字符