我想将一些类似于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]是“”,lineTokens [1]是“ john”,lineTokens [2]是“”,lineTokens [3]是“ 20”,等等。任何人都可以解释我做错了什么?

最佳答案

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

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


http://ideone.com/Qgs8y

10-06 14:41