我有以下字符串,其格式为 key1=value1, key2=value2
我需要将其加载到 map 中 (Map<String, String>)
如key=value
所以我需要用逗号分割 ,
然后加载cossn
作为 key 和 0
它的值(value)。
String payload = "cossn=0, abc=hello/=world, Agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
HashMap<String, String> holder = new HashMap();
String[] keyVals = payload.split(", ");
for(String keyVal:keyVals) {
String[] parts = keyVal.split("=",2);
holder.put(parts[0], parts[1]);
}
我得到java.lang.ArrayIndexOutOfBoundsException
在这一行holder.put(parts[0], parts[1]);
它正在发生在这个字符串 Agent=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
中因为它的值 KHTML, like Gecko
中有一个额外的逗号.
我该如何解决这个问题?一般来说,下面应该是我在 map 中加载后的键和值。
Key Value
cossn 0
abc hello/=world
Agent Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
最佳答案
正如您所说,您的 key 仅包含字母数字,以下内容可能是一个很好的分割启发式:
payload.split("\\s*,\\s*(?=[a-zA-Z0-9_]+\\s*=|$)");
这将在可能的空格逗号上进行分割,逗号后跟字符串末尾或字母数字键、可选的空格和等号。
关于java - 解析带有分隔符的字符串并将其加载到映射中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37402591/