groovy what';这个基本的结尾有什么问题?

groovy what';这个基本的结尾有什么问题?,groovy,Groovy,我有以下groovy代码: dataFile.filterLine() {it =~ /(${searchStr1}|${searchStr2})/ }.each { it -> println it it.split { list -> println "split line: ${list[0]}, ...." } } 第一个println非常好——列出了所有匹配的行。然后,分割会导致一个错误,实际上是在第二个println上。显然,

我有以下groovy代码:

dataFile.filterLine() {it =~ /(${searchStr1}|${searchStr2})/ }.each { it ->
    println it
    it.split { list ->
        println "split line:  ${list[0]},  ...."
    }
}
第一个println非常好——列出了所有匹配的行。然后,分割会导致一个错误,实际上是在第二个println上。显然,它不喜欢${list[0]}。但是,我不清楚这是怎么回事

错误是:

No signature of method: org.codehaus.groovy.runtime.DefaultGroovyMethods$4.getAt() is applicable for argument types: (java.lang.Integer) values: [0]
Possible solutions: getAt(java.lang.String), putAt(java.lang.String, java.lang.Object), wait(), grep(), getClass(), wait(long). Stacktrace follows:
谢谢

字符串。split()不接受闭包参数。我想您可能需要
it.split()。第三行的每个{list->


编辑:它实际上是匹配的,闭包用于对内容进行分组。

filterLine
不会返回您认为它会返回的内容;它是一个
可写的
,包含输入文件中的所有匹配项

下面是一个简单的例子:

f = new File("/home/dave/.bashrc")
w = f.filterLine({ it =~ /alias/ })
println w.class

s = w.toString()
println s

s.eachLine { println "==> ${it}" }

您要拆分的内容的类型是什么?不确定是什么“.each”将生成一个列表?我添加了一个println“类是:${it.getClass()}”就在第一个println的正上方,它生成了:class is:class org.codehaus.groovy.runtime.DefaultGroovyMethods$4…顺便说一句,我不想在这里做闭包。我只想不把我想从文件中分离出来的行分开。谢谢(缺少闭包参数是有意义的,并且添加了。每个都很有趣!)。我认为你的意思是“it.split it().each{line->”,即“->”之前的“line”。我这样尝试,但仍然出现错误。GrailExceptionResolver-NullPointerExceptionTaylor,如果我尝试拆分从文件中获取的行的方法是“糟糕”编程,请也提一下。任何好的方法都会奏效:-)我将“println it”澄清为“println”行:${it}”,看起来“it”是一条很长的线,所有匹配的文件行都加上了回车符(所以它愚弄了我)。@Ray,你说得对,修复了
行->
行。但是假设
拆分
应该将行拆分为字(或行),您想要的是no-arg或String-arg字符串拆分,而不是Closure-arg集合拆分。我不确定是否理解@Ataylor。我将发布一个关于此问题的一般性问题,因为我认为它作为一般性问题更有用。感谢您指出这一点Dave,您是对的(这很有效)。Groovy中一定有一种更优雅的方法可以过滤出文件中的一行,并将其拆分为多个部分…想法?我应该发布第二个问题吗?谢谢你的帮助Dave,我还发布了一个一般性问题。