如何在Java中搜索一串键/值对

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)


icy*_*com 8

使用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)


mat*_*fee 5

如果它只是您所关注的一个键,您可以使用正则表达式\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)

如果你正在用其他键做某事,那么拆分;然后=在循环内 - 不需要正则表达式.