JAVA:解析单个String键值对

时间:2016-03-09 03:48:19

标签: java regex string-parsing

我试图找出一种方法来分离同一行上的键值对。

将以下输入作为样本

key1=0 key2=val0 key3=my val 0 key4=some (val)

起初,我在输入数据中没有看到这个,因为它被埋没了,并没有认为有任何空格。因此,我根据空间将每一行分成一个数组,然后将结果数组作为Properties对象读取,最后读入我的Map。现在这会产生不好的结果。

此时我认为这是正则表达式的一个问题,而且我对这种技能非常糟糕。

有没有办法获取上面的示例数据(单个字符串)并正确地将其解析为生成的HashMap

key1:0
key2:val0
key3:my val 0
key4:some (val)

剔牙!

编辑,回答:

Pattern p = Pattern.compile("(\\w+)=\"*((?<=\")[^\"]+(?=\")|([^\\s]+))\"*");

String test = "a0=d235 a1=2314 com1=\"abcd\" com2=\"a b c d\"";
Matcher m = p.matcher(test);

while(m.find()){
    print m.group(1);
    print "="
    println m.group(2);
}

1 个答案:

答案 0 :(得分:0)

试试这个。

String s = "key1=0 key2=val0 key3=my val 0 key4=some (val)";
Pattern pat = Pattern.compile("(\\b\\w+)=(.*?)(?=\\w+=|$)");
Matcher m = pat.matcher(s);
while (m.find())
    System.out.println(m.group(1) + ":" + m.group(2));

结果

key1:0 
key2:val0 
key3:my val 0 
key4:some (val)