序列映射抛出一个错误:NoSuchElementException:next on empty iterator

时间:2016-06-04 16:23:52

标签: scala scala-collections

这是我在play框架中第一次尝试使用scala。我真正想要实现的是从段落中的句子中取出每个第一个单词。

这是抛出错误的代码

文字是可变的.Seq [String]

someText.flatMap(_ split "[.?!]")
  .map(_ split "\\s+" filter !_.equals("") head)
  .toList

但问题出在第二行。它抛出错误说:

  

[NoSuchElementException:next on empty iterator]

以我的拙见,只要 someText 是一个包含大量句子的真实段落,用空格分隔的句子就不会是空的。

有人可以澄清,这是怎么发生的以及如何解决它?

2 个答案:

答案 0 :(得分:1)

  1. 首先,我认为您的正则表达式不正常,请参阅here。它将匹配任何带有点Asd的字符。如果您想以点字符形式对待它,则需要像.一样将其转义。
  2. 您的\\.someText吗?我不明白为什么你Option[String]
  3. 当您在空集合上调用flatMap时,您会收到异常,请注意这一点。
  4. 如果你的问题仍然存在,我会这样做:
  5. head

答案 1 :(得分:-1)

您使用.head操作,这是不安全的(如果集合为空则例外)。

您最好使用.headOption

someText.flatMap(_ split "[.?!]")
  .flatMap(_ split "\\s+" filter !_.equals("") headOption toList)
  .toList