使用“。”不能正确分割文本。分隔符

问题描述:

在斯卡拉,我有一个由一组句子组成的文本。 我试图分裂这个文本变成单独的句子是这样的:使用“。”不能正确分割文本。分隔符

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: 
+1

您是否有一个最小示例在手?我是斯卡拉的初学者,但我想帮忙。 – gsamaras

+0

我也在谈论代码。 :) – gsamaras

+0

包含它的代码有点复杂,我认为这不会有帮助。 – octavian

String.split需要一个正则表达式,.意味着在正则表达式 “任何东西”,所以你需要转义:

val sentences: Array[String] = text.split("\\.") 

现在,如果您的分隔符是单个字符,则可以使用重载的split(char)方法不会将参数解释为正则表达式。

val sentences: Array[String] = text.split('.') 
+0

觉得很有用,从我这里投票。 –

java.lang.String#split(String)方法按RegEx而不是字符序列分割。 .是一个特殊的正则表达式字符,匹配任何字符(包括字母)。因此,你最终分裂一切,这产生一个空的数组。您可以通过转义正则表达式中的.字符来避免这种情况:

val sentences: Array[String] = text.split("\\.") 
             //^escape using \ 
+0

为什么在这种情况下需要双倍\?例如代码replaceAll(“\”“,”“)'也适用,尽管它只有一个。 – octavian

+1

这是Strings库中的一个不一致的情况。一些方法采用字符串字面值作为其他方式表达的正则表达式作为一个字符串,最好的方法是看看ScalaDocs或者在每次做这样的事情时在REPL上做实验 – marios

+1

@octavian传递字符串'\ .',但是用Scala中的内容表示字符串,你需要[逃避反斜杠](https://xkcd.com/1638/),所以它变成'\\'。 – *soft