gpt4 book ai didi

java - 用于将嵌套列表字符串表示形式转换回列表的 Groovy/Java 方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:02:44 24 4
gpt4 key购买 nike

我需要将嵌套列表的字符串表示形式转换回 Groovy/Java 中的嵌套列表(字符串),例如

String myString = "[[one, two], [three, four]]"
List myList = isThereAnyMethodForThis(myString)

我知道有 Groovy .split 方法可以用逗号分割字符串,我可以使用正则表达式来识别 [ 和 ] 之间的嵌套列表,但我只想知道是否有现有的方法可以做到这一点或者如果我必须自己编写此代码。

我想最简单的事情是将 String 表示形式作为参数的 List 构造函数,但我还没有找到类似的东西。

最佳答案

在 Groovy 中,如果您的字符串是这样分隔的,您可以这样做:

String myString = "[['one', 'two'], ['three', 'four']]"
List myList = Eval.me(myString)

但是,如果它们没有像您的示例中那样分隔,我认为您需要开始使用 shell 和自定义绑定(bind)...

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 )

编辑解释事物

Binding在 Groovy 中 “表示脚本的变量绑定(bind),可以从脚本对象外部更改或在脚本外部创建并传递到脚本中。”

所以在这里,我们创建了一个自定义绑定(bind),它在请求变量时返回变量的名称(将其视为将任何变量的默认值设置为该变量的名称)。

我们将其设置为 GroovyShell 的绑定(bind)将用于评估变量,然后通过 Shell 运行代表我们列表的字符串。

每次 Shell 遇到 onetwo 等时,它都会假定它是一个变量名,并在 Binding 中寻找该变量的值。绑定(bind)只是返回变量的名称,并将其放入我们的列表中

另一个编辑...我找到了一条更短的路

您可以在 Groovy 中将 Maps 用作 Binding 对象,并且可以对 Maps 使用 withDefault 闭包,以便在缺少键时返回此闭包的结果作为该键的默认值 key 。 An example can be found here

这意味着,我们可以将代码缩减为:

String myString = "[[one, two], [three, four]]"
Map bindingMap = [:].withDefault { it }
List myList = new GroovyShell( bindingMap as Binding ).evaluate( myString )

如您所见,如果 map 中缺少键, map (感谢 withDefault)返回传递给它的键。

关于java - 用于将嵌套列表字符串表示形式转换回列表的 Groovy/Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3573263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com