如何返回可以重复迭代的正则表达式匹配

时间:2013-02-08 20:56:41

标签: regex scala iterator set-comprehension

我似乎只能迭代结果val一次。调用长度迭代它,因此调用result.next会导致异常。

    val result = for ( regex(name) <- regex findAllIn output) yield name
    println(result.length)
    println(result.next)

结果是AFAIK是Iterator [String],所以我不知道为什么我只能迭代一次。

2 个答案:

答案 0 :(得分:2)

您可以尝试在其上调用类似toVector的内容,以便将其存储在持久集合中,然后您可以根据需要多次迭代它。

Iterator只允许您遍历内容一次,因此如果您想要遍历一次以上,那么将其转换为集合。如果您有Iterator[String],则在其上调用类似.toVector的内容会为您提供Vector[String]

答案 1 :(得分:2)

  

结果是AFAIK是Iterator [String],所以我不知道为什么我只能迭代一次。

因为这是Iterator的工作方式。你不能走回去或重置它们 - 一旦你遍历它们,它们就会“用完”。

解决方法是将结果转换为例如List,没有这样的限制:

val result = (for ( regex(name) <- regex findAllIn output) yield name).toList
println(result.length)
println(result.head)