Jör*_*yer 3 java arrays string groovy list
我需要将嵌套List的String表示形式转换回Groovy/Java中的嵌套List(of Strings),例如
String myString = "[[one, two], [three, four]]"
List myList = isThereAnyMethodForThis(myString)
Run Code Online (Sandbox Code Playgroud)
我知道,有一个分裂的字符串用逗号比如Groovy的.split方法,我可以使用正则表达式来识别之间[和]嵌套列表,但我只是想知道,如果有一个现有的方法可以做到这一点,或者如果我必须自己编写这段代码.
我想最简单的事情是List构造函数,它将String表示作为参数,但我还没有找到这样的东西.
在Groovy中,如果你的字符串是这样分隔的,你可以这样做:
String myString = "[['one', 'two'], ['three', 'four']]"
List myList = Eval.me(myString)
Run Code Online (Sandbox Code Playgroud)
但是,如果它们没有像你的例子那样分隔,我认为你需要开始玩shell和自定义绑定...
class StringToList extends Binding {
def getVariable( String name ) {
name
}
def toList( String list ) {
new GroovyShell( this ).evaluate( list )
}
}
String myString = "[[one, two], [three, four]]"
List myList = new StringToList().toList( myString )
Run Code Online (Sandbox Code Playgroud)
Groovy中的Binding "表示脚本的变量绑定,可以从脚本对象外部更改,也可以在脚本外部创建并传递给脚本."
所以在这里,我们创建一个自定义绑定,在请求变量时返回变量的名称(将其视为将任何变量的默认值设置为该变量的名称).
我们将此设置为GroovyShell用于评估变量的Binding,然后通过Shell运行表示我们列表的String.
每个壳牌遇到时间one
,two
等等,它假定它是一个变量名,去寻找在绑定变量的值.绑定只返回变量的名称,并将其放入我们的列表中
您可以在Groovy中使用Maps作为绑定对象,并且可以withDefault
对Maps 使用闭包,这样当缺少键时,此闭包的结果将作为该键的默认值返回. 这里可以找到一个例子
这意味着,我们可以将代码缩减为:
String myString = "[[one, two], [three, four]]"
Map bindingMap = [:].withDefault { it }
List myList = new GroovyShell( bindingMap as Binding ).evaluate( myString )
Run Code Online (Sandbox Code Playgroud)
如您所见,Map(感谢withDefault
)返回传递给它的键(如果Map中缺少该键).
归档时间: |
|
查看次数: |
1536 次 |
最近记录: |