use*_*456 6 java regex string-matching
我有一个格式如下的字符串:
"key1=value1;key2=value2;key3=value3"
对于任意数量的键/值对.
我需要检查某个键是否存在(假设它叫做"特殊键").如果是,我想要与之相关的值.如果有多个"特殊键"设置,我只想要第一个.
现在,我正在寻找"特殊键"的索引.我从该索引处开始一个子串,然后查找第一个=字符的索引.然后我寻找第一个;字符的索引.这两个索引之间的子字符串给出了与"特殊键"相关的值.
这不是一个优雅的解决方案,它真的很困扰我.找到与"特殊键"对应的值的优雅方法是什么?
Mik*_*ler 10
我会将String解析为一个映射,然后检查密钥:
String rawValues = "key1=value1;key2=value2;key3=value3";
Map<String,String> map = new HashMap<String,String>();
String[] entries = rawValues.split(";");
for (String entry : entries) {
String[] keyValue = entry.split("=");
map.put(keyValue[0],keyValue[1]);
}
if (map.containsKey("myKey") {
return map.get("myKey");
}
Run Code Online (Sandbox Code Playgroud)
使用String.split:
String[] kvPairs = "key1=value1;key2=value2;key3=value3".split(";");
Run Code Online (Sandbox Code Playgroud)
这将为您提供kvPairs包含以下元素的数组:
key1=value1
key2=value2
key3=value3
Run Code Online (Sandbox Code Playgroud)
迭代这些并将它们分开:
for(String kvPair: kvPairs) {
String[] kv = kvPair.split("=");
String key = kv[0];
String value = kv[1];
// Now do with key whatever you want with key and value...
if(key.equals("specialkey")) {
// Do something with value if the key is "specialvalue"...
}
}
Run Code Online (Sandbox Code Playgroud)
如果它只是您所关注的一个键,您可以使用正则表达式\bspecialkey=([^;]+)(;|$)并提取捕获组1:
Pattern p = Pattern.compile("\\bspecialkey=([^;]+)(;|$)");
Matcher m = p.matcher("key1=value1;key2=value2;key3=value3");
if (m.find()) {
System.out.println(m.group(1));
}
Run Code Online (Sandbox Code Playgroud)
如果你正在用其他键做某事,那么拆分;然后=在循环内 - 不需要正则表达式.
| 归档时间: |
|
| 查看次数: |
19189 次 |
| 最近记录: |