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

我正在使用一种API,该API为我提供了XML,并且我需要从一个实际上是字符串的标签中获取一张地图。例:

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

所以我不能只用逗号然后用等号分开。是否可以使用正则表达式将类似字符串的内容转换为地图?

到目前为止,我的代码是:

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演示。

  • (\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测试:

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

以上是 将key = value的字符串解析为Map 的全部内容, 来源链接: utcz.com/qa/434280.html

回到顶部