Regex 正则表达式组上的非空迭代器变为空数组

Regex 正则表达式组上的非空迭代器变为空数组,regex,scala,iterator,Regex,Scala,Iterator,我有一种奇怪的情况——当我将正则表达式组打印到控制台时,它们就会出现。当我将这个迭代器转换为数组时,它是空的。以下代码不打印任何内容: val str = "buy--751-rates.data" val expr = "--(.+)-rates.data".r val target = Array[String]() expr.findAllIn(str).matchData map(m => m group 1) copyToArray(target, 0, 4) target

我有一种奇怪的情况——当我将正则表达式组打印到控制台时,它们就会出现。当我将这个迭代器转换为数组时,它是空的。以下代码不打印任何内容:

val str = "buy--751-rates.data"

val expr = "--(.+)-rates.data".r

val target = Array[String]()
expr.findAllIn(str).matchData map(m => m group 1) copyToArray(target, 0, 4)
target foreach { println }
但这个片段是有效的:

val str = "buy--751-rates.data"

val expr = "--(.+)-rates.data".r
println("Scala matches:")
expr.findAllIn(str).matchData foreach {
   m => println(m group 1)
}

我想我错过了一些简单的东西

你没有得到任何东西,因为你在复制一个零长度数组。实际上不需要这样做,因为迭代器上有一个toArray方法将其转换为and数组,如果需要,可以从中获得head值。例如:


(expr.findAllIn(str.matchData).map(m=>m组1).toArray.head

由于复制到零长度数组,所以没有得到任何结果。实际上不需要这样做,因为迭代器上有一个toArray方法将其转换为and数组,如果需要,可以从中获得head值。例如:



(expr.findAllIn(str).matchData.map(m=>m组1).toArray.head

expr.findAllIn(str).matchData-map(m=>m组1)foreach{m=>println(m)}?它的行为是否也很奇怪?使用
expr.findAllIn(str).matchData foreach{m=>target:+m}
而不是第一个代码段中的倒数第二行如何?@bash0r您的解决方案有效。事实上,我想要的是得到它的第一个元素,但是迭代器上没有head方法如果你在第一次匹配之后,为什么不使用对我不起作用的
findFirstIn
?@RedLaser-仍然是空的数组关于
expr.findAllIn(str).matchData-map(m=>m-group1)foreach{m=>println(m)}
?它的行为是否也很奇怪?使用
expr.findAllIn(str).matchData foreach{m=>target:+m}
而不是第一个代码段中的倒数第二行如何?@bash0r您的解决方案有效。实际上,我想要的是得到第一个元素,但是迭代器上没有head方法如果你在第一次匹配之后,为什么不使用对我不起作用的
findFirstIn
?@RedLaser?正如我的测试所示,仍然是空的arraySame。数组是空的,因为它从一开始就是空的:多谢各位,我以为我疯了。有什么原因导致
.toArray()
迭代器的调用不起作用吗?更正-它完全按照Al编写的方式工作,没有大括号。所以我可以做
iterator.toArray.something
但不能做
iterator.toArray().something
?@chester89,因为它不需要我的测试所显示的圆形括号。数组是空的,因为它从一开始就是空的:多谢各位,我以为我疯了。有什么原因导致
.toArray()
迭代器的调用不起作用吗?更正-它完全按照Al编写的方式工作,没有大括号。所以我可以做
iterator.toArray.something
但不能做
iterator.toArray().something
?@chester89,因为它不需要圆括号