2013-01-22 86 views
21

下面的代碼:如何將句子拆分爲由多個空格分隔的單詞?

val sentence = "1 2 3 4".split(" ") 

給我:

Array(1, 2, "", 3, "", "", 4) 

但我寧願希望有隻有一行字:

Array(1, 2, 3, 4) 

我怎麼可以拆分句子的時單詞是由多個空格分隔的?

+0

http://stackoverflow.com/questions/225337/how-do-i-split-a-string-with-any - 空白字符作爲分隔符 這工作。 – yalkris

回答

48

使用正則表達式:

scala> "1 2 3".split(" +") 
res1: Array[String] = Array(1, 2, 3) 

的 「+」 是指 「一個或多個先前的」(以前是一個空間)。

更好

的是,如果你想拆就所有空格:

scala> "1 2 3".split("\\s+") 
res2: Array[String] = Array(1, 2, 3) 

(。凡"\\s"Pattern它匹配任何空白尋找here更多的例子)

+0

比照。 「1 2 3」.split(「」「\ s +」「」)與Scala中的「1 2 3」.split(「\\ s +」)相同。原始字符串(用「」打包的字符串)在複雜模式下非常有用 – Naetmul

+2

注意:對於以空格開頭的字符串:「1 2 3」.split(「\\ s +」),這會給出誰的第一個元素是空字符串。是否有正則表達式可以避免這種情況? – user48956

+0

@ user48956「1 2 3」.trim.split(「\\ s +」) –

4

您可以從分割Array中篩選出""

scala> val sentence = "1 2 3 4".split(" ").filterNot(_ == "") 
sentence: Array[java.lang.String] = Array(1, 2, 3, 4) 
+0

這個也可以,但我發現了另一個微不足道的答案。謝謝 – yalkris

2

這個正則表達式\\W+提供(alphaunmerical)的單詞,因此

val sentence = "1 2 3 4".split("\\W+") 
sentence: Array[String] = Array(1, 2, 3, 4) 

爲了便於使用,在Scala 2.1 0 *和2.11 *考慮

implicit class RichString(val s: String) extends AnyVal { 
    def words = s.split("\\W+") 
} 

因此,

sentence.words 
res: Array[String] = Array(1, 2, 3, 4) 
相關問題