Parse a String of key=value to a Map(将 key=value 的字符串解析为 Map)
问题描述
我正在使用一个提供 XML 的 API,我需要从一个实际上是字符串的标签中获取地图.示例:
I'm using an API that gives me a XML and I need to get a map from one tag which is actually a string. Example:
拥有
Billable=7200,Overtime=false,TransportCosts=20$
我需要
["Billable"="7200","Overtime=false","TransportCosts"="20$"]
问题是字符串是完全动态的,所以,它可以像
The problem is that the string is totally dynamic, so, it can be like
Overtime=true,TransportCosts=one, two, three
Overtime=true,TransportCosts=1= 1,two, three,Billable=7200
所以我不能只用逗号分隔,然后用等号分隔.是否可以使用正则表达式将类似的字符串转换为地图?
So I can not just split by comma and then by equal sign. Is it possible to convert a string like those to a map using a regex?
到目前为止我的代码是:
My code so far is:
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+=|$)
请参阅 正则表达式演示.
详情
(w+)
- 第 1 组:一个或多个单词字符=
- 一个等号(.*?)
- 第 2 组:除换行符以外的任何零个或多个字符,尽可能少(?=,w+=|$)
- 需要,
,然后是 1+ 个单词字符,然后是=的正向前瞻代码>,或字符串的结尾紧挨当前位置的右侧.
(w+)
- Group 1: one or more word chars=
- an equal sign(.*?)
- Group 2: any zero or more chars other than line break chars, as few as possible(?=,w+=|$)
- a positive lookahead that requires a,
, then 1+ word chars, and then=
, or end of string immediately to the right of the current location.
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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将 key=value 的字符串解析为 Map


- Eclipse 插件更新错误日志在哪里? 2022-01-01
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01