【问题标题】:How to split sentence into words separated by multiple spaces?如何将句子拆分为由多个空格分隔的单词?
【发布时间】:2013-01-22 23:30:33
【问题描述】:

以下代码:

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

给我:

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

但我宁愿只写单词:

Array(1, 2, 3, 4)

单词被多个空格隔开,如何分句?

【问题讨论】:

标签: scala


【解决方案1】:

使用正则表达式:

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。)

【讨论】:

  • 参见。 "1 2 3".split("""\s+""") 与 Scala 中的 "1 2 3".split("\\s+") 相同。原始字符串(用 """ 包裹的字符串)在复杂模式中很有用。
  • 注意。对于以空格开头的字符串:" 1 2 3".split("\\s+"),这会给出第一个元素是空字符串的结果。有没有正则表达式可以避免这种情况?
  • @user48956 " 1 2 3".trim.split("\\s+")
  • 在文件文本中 "\n\n".trim.split(" +") 给出 Array[String] = Array("") .. 一个空字符串.. 有什么建议吗?跨度>
【解决方案2】:

您可以从拆分的Array 中过滤掉""

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

【讨论】:

  • 这个也可以,但我找到了另一个微不足道的答案。谢谢
【解决方案3】:

这个正则表达式\\W+ 传递(不使用字母的)单词,因此

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

为了便于使用,在 Scala 2.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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2010-12-30
    • 2018-06-09
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多