【问题标题】:How can I split a string into meaningful tokens?如何将字符串拆分为有意义的标记?
【发布时间】:2012-03-19 16:34:05
【问题描述】:

我需要一种更好的方法来拆分以下字符串。我不确定如何识别子字符串并将其分配给正确的变量:

1972 年 8 月 24 日在曼彻斯特(老特拉福德)英格兰以 6 个小门获胜 [还剩 35 个球]

我想拆分上面的字符串并将子字符串分配给不同的变量。

Venue --> Manchester (Old Trafford)
Date --> 24/8/1972
Result --> England won by 6 wickets  [35 balls remaining]

我试过StringTokenizer,但是我觉得像上面那样做作业太费力了,而且太复杂了。当我使用StringTokenizer 时,我得到了以下子字符串:

在 曼彻斯特
(旧
特拉福德)
24/8/1972
英格兰
赢了

6
检票口
[35

剩余]

请提出任何更好的方法。

【问题讨论】:

  • 也许你应该对正则表达式进行一些探索。
  • 一个示例输入不是规范。要么用简单的英语说出规范是什么(输入将遵循什么模式?),要么给出更多示例,以便我们通过示例学习。

标签: java string parsing


【解决方案1】:

如果所有字符串都具有相同的格式(地点、斜线分隔的日期、结果),则可以使用正则表达式。

Pattern p = Pattern.compile("(.+) (\\d+/\\d+/\\d+) (.+)");
Matcher m = p.matcher(record);
if (!m.matches()) 
  throw new IllegalArgumentException("Invalid record format.");
String venue = m.group(1);
String date = m.group(2);
String result = m.group(3);
...

这假设场地永远不会包含看起来像日期的子字符串。

【讨论】:

  • 您在正则表达式中向我展示了方法,谢谢,解决方案很短。
猜你喜欢
  • 2013-08-21
  • 2013-09-15
  • 1970-01-01
  • 2011-01-06
  • 2011-04-22
  • 2021-03-30
  • 2020-11-13
  • 2012-03-23
相关资源
最近更新 更多