我想将一些类似于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"等等。任何人都可以解释我做错了什么吗?
答案 0 :(得分:3)
问题在于,您的正则表达式与, id:
整体不匹配,它将,
作为一个匹配,然后id:
作为第二个匹配。在这两个匹配项之间,您有一个空字符串。你需要修改它以匹配整个事情。像这样:
String delims = "(, )?(name|id|dest|from|date_time)?[:\\s]+";
答案 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:...."