26

次のコード:

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

私に与える:

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

しかし、私はむしろ言葉だけを持ちたいです:

Array(1, 2, 3, 4)

単語が複数のスペースで区切られている場合、どうすれば文を分割できますか?

4

3 に答える 3

63

正規表現を使用します。

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

「+」は「前の1つ以上」(前はスペース)を意味します。

さらに良いことに、すべての空白で分割したい場合:

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

(任意の空白に一致"\\s"するパターンはどこにありますか。他の例については、ここを参照してください。)

于 2013-01-22T23:41:06.870 に答える
5

""分割からを除外できますArray

scala> val sentence = "1 2  3   4".split(" ").filterNot(_ == "")
sentence: Array[java.lang.String] = Array(1, 2, 3, 4)
于 2013-01-22T23:32:44.883 に答える
3

この正規表現\\W+は(英数字の)単語を提供します。

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

使いやすさのために、Scala2.10。*および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)
于 2014-12-05T07:49:16.643 に答える