gpt4 book ai didi

java - 将 key=value 的字符串解析为 Map

转载 作者:行者123 更新时间:2023-11-30 07:45:48 26 4
gpt4 key购买 nike

我正在使用一个 API,它给我一个 XML,我需要从一个实际上是字符串的标签中获取 map 。示例:

拥有

Billable=7200,Overtime=false,TransportCosts=20$

我需要

["Billable"="7200","Overtime=false","TransportCosts"="20$"]

问题是字符串是完全动态的,所以,它可以像

Overtime=true,TransportCosts=one, two, three
Overtime=true,TransportCosts=1= 1,two, three,Billable=7200

所以我不能先用逗号再用等号分开。是否可以使用正则表达式将类似的字符串转换为 map ?

到目前为止我的代码是:

private Map<String, String> getAttributes(String attributes) {
final Map<String, String> attr = new HashMap<>();
if (attributes.contains(",")) {
final String[] pairs = attributes.split(",");
for (String s : pairs) {
if (s.contains("=")) {
final String pair = s;
final String[] keyValue = pair.split("=");
attr.put(keyValue[0], keyValue[1]);
}
}
return attr;
}
return attr;
}

提前致谢

最佳答案

你可以使用

(\w+)=(.*?)(?=,\w+=|$)

参见 regex demo .

详情

  • (\w+) - 第 1 组:一个或多个单词字符
  • = - 等号
  • (.*?) - 第 2 组:除换行符以外的任何零个或多个字符,尽可能少
  • (?=,\w+=|$) - 需要 , 的正面前瞻,然后是 1+ 个单词字符,然后是 =,或紧接在当前位置右侧的字符串结尾。

Java代码:

public static Map<String, String> getAttributes(String attributes) {
Map<String, String> attr = new HashMap<>();
Matcher m = Pattern.compile("(\\w+)=(.*?)(?=,\\w+=|$)").matcher(attributes);
while (m.find()) {
attr.put(m.group(1), m.group(2));
}
return attr;
}

Java test :

String s = "Overtime=true,TransportCosts=1= 1,two, three,Billable=7200";
Map<String,String> map = getAttributes(s);
for (Map.Entry entry : map.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}

结果:

Overtime=true
Billable=7200
TransportCosts=1= 1,two, three

关于java - 将 key=value 的字符串解析为 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51288154/

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