java - 解析带有分隔符的字符串并将其加载到映射中?

标签 java regex string split guava

我有以下字符串,其格式为 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/

相关文章:

regex - 在 Linux 文件系统上查找非 UTF8 文件名

java - 如何比较字符串的百分比?

c++ - boost mpi : Is there a max length for string variables to pass in an mpi message?

java - EJB-2.0事务回滚是否撤消/恢复数据库更改?

Java:杀死由 ExecutorService 作为 Runnable 启动的线程

python - 提高 C++ 正则表达式替换性能

c# - 在任何第一个数字之前拆分字符串

java - Java 中用点/星着色的进度

java - 带有继承的 JPA 映射树结构

javascript - 结合 2 个正则表达式,一个使用 OR 运算符完全匹配