有没有更简单的方法将Intellij IDEA环境变量转换为元组列表?
Intellij的环境变量是
GROCERY_LIST=[("egg", "dairy"),("chicken", "meat"),("apple", "fruit")]
环境变量作为字符串访问Kotlin文件。
val g_list = System.getenv("GROCERY_LIST")
理想情况下,我希望迭代g_list
,第一个元素是("egg", "dairy")
,以此类推,然后("egg", "dairy")
是一个元组/对
我尝试过用逗号分割g_list
,但逗号不在引号内,即
val splitted_list = g_list.split(",(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*\$)".toRegex()).toTypedArray()
这给出了第一个元素为[("egg",
,第二个元素为"dairy")]
,依此类推。
还创建了一个数据类,并尝试使用jacksonObjectMapper
将字符串Map到数据类,以下this链接:
val mapper = jacksonObjectMapper()
val g_list = System.getenv("GROCERY_LIST")
val myList: List<Shopping> = mapper.readValue(g_list)
data class Shopping(val a: String, val b: String)
2条答案
按热度按时间juzqafwq1#
1.您可以创建一个正则表达式来匹配环境变量中的所有字符串。
Regex::findAll()
1.然后在创建
Shopping
对象列表时循环字符串。6fe3ivhb2#
使用正则表达式匹配括号从来都不是一个好主意。
我建议采取循序渐进的办法:
您可以首先通过以下方式匹配名称和值
在这里,您可以获得第1组中的名称和第2组中的值,而无需考虑值中可能出现的任何后续
=
字符。如果您想拆分该值,我将通过匹配by首先去掉开始和结束括号
(or只需将字符串的前两个字符和最后两个字符删除,如果始终给定字符串,则以
[(
开头,以)]
结尾)然后通过拆分得到单个列表条目
(take注意拆分操作也需要一个正则表达式,因此必须对其进行转义)
对于每个列表条目,您可以简单地将其拆分为
或者,如果要删除引号字符,请将 match 与
其中组1包含键(等号左侧),组2包含值(等号右侧)