用split(regex)Java分割字符串麻烦

时间:2012-02-26 02:19:32

标签: java regex split

我想将一些类似于name: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]的字符串拆分为这些标记:

john
20
toledo
seattle
[2/8/12 15:48:01:837 MST]

我这样做

String delims = "(name|id|dest|from|date_time)?[:,\\s]+";
String line = "name: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]";
String[] lineTokens = line.split(delims, 5);

for (String t : lineTokens)
{
    // for debugging
    System.out.println (t);
    // other processing I want to do
}   

但是lineTokens中的每个偶数元素都是空的或只是空格。 lineTokens中的每个奇数元素都是我想要的,即lineTokens [0]是"&#34 ;, lineTokens [1]是" john&#34 ;, lineTokens [2]是"&# 34 ;, lineTokens [3]是" 20"等等。任何人都可以解释我做错了什么吗?

3 个答案:

答案 0 :(得分:3)

问题在于,您的正则表达式与, id:整体不匹配,它将,作为一个匹配,然后id:作为第二个匹配。在这两个匹配项之间,您有一个空字符串。你需要修改它以匹配整个事情。像这样:

String delims = "(, )?(name|id|dest|from|date_time)?[:\\s]+";

http://ideone.com/Qgs8y

答案 1 :(得分:2)

为什么不是一个不太复杂的正则表达式解决方案。

String str =  "name: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]";
String[] expr = str.split(", ");
for(String e : expr)
System.out.println(e.split(": ")[1]);

输出=

  约翰

     

20

     

托莱多

     

西雅图

     

[2/8/12 15:48:01:837 MST]

答案 2 :(得分:1)

我对您的代码进行了一些更改:

    String delims = "(name|id|dest|from|date_time)[:,\\s]+";
    String line = "name: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]";
    String[] lineTokens = line.split(delims);

    for (String t : lineTokens)
    {
        // for debugging
        System.out.println (t);
        // other processing I want to do
    }   

你也应该忽略lineTokens中的第一个元素,因为它是从行的开头捕获直到" name:...."