Java 复键值对
我有一个这种格式的字符串Java 复键值对,java,regex,Java,Regex,我有一个这种格式的字符串 "key1=value1 key2=value2 key3=value3 key2=value6 ...." 键是字母数字的,没有空格。键可以在字符串中重复。值可以有任何值,包括空格、IP地址等 Feb 09 2015 12:28:26 UTC 20.201.78.57 asdaaq.org 我需要能够解析字符串并将其拆分为键值对,并且能够创建Java映射>。有人能建议一种方法来分割字符串吗 我尝试了regex^((\b[^\s=]+)=(([^=]\\=)+)
"key1=value1 key2=value2 key3=value3 key2=value6 ...."
键是字母数字的,没有空格。键可以在字符串中重复。值可以有任何值,包括空格、IP地址等
Feb 09 2015 12:28:26 UTC
20.201.78.57
asdaaq.org
我需要能够解析字符串并将其拆分为键值对,并且能够创建Java映射>。有人能建议一种方法来分割字符串吗
我尝试了regex
^((\b[^\s=]+)=(([^=]\\=)+)*$
,但这并不适用于所有情况如果您可以假设值不包含=
,那么任务就很简单:
String[] kvPairs = inputString.split("\\s+(?=[A-Za-z0-9]+=)");
(?=[A-Za-z0-9]+=)
是一个零宽度断言,它匹配每个键的开头,后面是字母数字,中间没有空格\s+
匹配一个或多个空格字符,并将它们视为分隔符,因此结果不会有任何尾随空格。试试看,它通过查找=
使用lookaheads在关键字名称之前停止
([\w\d]+)=([^=]*)(?=\s\w+=|$)
如果值中允许使用空格,则无法区分值的结尾(n)和键的开头(n+1)。每个键值之间是否始终存在空格?cfqueryparam。你的正则表达式起作用了。非常感谢。别忘了选择他的答案:)@dcmovva你提到钥匙可以重复。这意味着您要么需要存储在
映射中,要么使用第三方库中的多重映射。@AvinashRaj:这当然是一个选项,可能\s+(?=…
更好。