在Scala中,我有一个由一组句子组成的文本。 我试图将这个文本分成这样的单个句子:
val sentences: Array[String] = text.split(".")
但是,当我检查sentences
数组时(如下面一行所示),我发现数组是空的:
println("Sentences are: " + sentences.mkString(" "))
为什么拆分没有正确完成?
对于文字:
A sword is a bladed weapon intended for both cutting and thrusting. The precise definition of the term varies with the historical epoch or the geographical region under consideration. A sword in the most narrow sense consists of a straight blade with two edges.
输出结果为:
Sentences are:
答案 0 :(得分:5)
String.split需要正则表达式,.
表示正则表达式中的“任何东西”,因此您需要将其转义:
val sentences: Array[String] = text.split("\\.")
现在,如果您的分隔符是单个字符,则可以使用不会将参数解释为正则表达式的重载split(char)
方法。
val sentences: Array[String] = text.split('.')
答案 1 :(得分:2)
java.lang.String#split(String)
方法按RegEx而不是字符序列进行拆分。 .
是一个特殊的正则表达式字符,匹配任何字符(包括字母)。因此,您最终会通过所有进行拆分,从而产生一个空数组。您可以通过转义正则表达式中的.
字符来避免这种情况:
val sentences: Array[String] = text.split("\\.")
// ^ escape using \