如何轻松解析此字符串?

时间:2013-04-20 17:20:46

标签: java string parsing split

所以我想从表单上的某些内容中提取数据:

“圣地亚哥” - “圣安东尼奥”[1319]

我想在括号[]中提取两个城市名称和最后的数字。如果城市是一个单词,则在此示例中没有“”:

托莱多 - 斯普林菲尔德[677]

现在我正在使用str.split(“ - ”)然后使用str.split(“[”)。然而,后者不是有害的,如果我尝试使用分裂(“”),它将分裂在两个单词城市的中间。

3 个答案:

答案 0 :(得分:6)

正则表达式似乎被挪用了:

"?(.*?)"?--"?(.*?)"? \[(.*?)]

在Java中:

Pattern p = Pattern.compile("\"?(.*?)\"?--\"?(.*?)\"? \\[(.*?)]");
Matcher m = p.matcher("\"San Diego\"--\"San Antonio\" [1319]");
if (m.find()) {
    System.out.println(m.group(1));
    System.out.println(m.group(2));
    System.out.println(m.group(3));
}

打印:

San Diego
San Antonio
1319

正则表达式解释

  • "?表示“a "或不是”
  • .*?表示“any string”
  • 括号捕获它们之间的数据,这就是为什么之后我们可以使用m.group(...)访问它们。

答案 1 :(得分:1)

在拆分后 - 然后使用contains()方法检查“如果它为真,则按空格拆分并[。

答案 2 :(得分:1)

你也可以使用StringTokenizer替代正则表达式,在StringTokenizer中你可以指定彼此相邻的分隔符,这里假设你想要 - 和[作为分隔符,所以只需写 - [在分隔符部分

String input="\"San Diego\"--\"San Antonio\" [1319]";
StringTokenizer tok = new StringTokenizer(input, "--[");
while (tok.hasMoreTokens()) 
{
    System.out.println(tok.nextToken());
}