首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据位置将字符串解析为标记

根据位置将字符串解析为标记
EN

Stack Overflow用户
提问于 2011-03-03 03:46:48
回答 3查看 579关注 0票数 0

我有这个字符串

“姓名,演出于2009年8月14日开始,您的机票预订于2009年8月14日”

在此字符串中,我希望获得值StartDate、bookedDate和nameofthePerson,因为单个tokens.This应使用相同格式的所有字符串

如何在java中解析它们?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-03 04:14:54

我预计人们会非常热衷于推荐regex来解决这个问题,但我不认为他们总是提供最好的解决方案。它们可能很难阅读,也更难调试。因此,作为替代方案,我建议使用String.split():

代码语言:javascript
复制
    String line = "Name, Show starts on 14/08/09, your ticket is booked on 14/08/09";
    String[] parts = line.split("[ ,]"); // ie split on comma or space

    String name = parts[0];
    String showDate = parts[5];
    String bookDate = parts[12];

    System.out.println(name + ":" + showDate + ":" + bookDate);
票数 1
EN

Stack Overflow用户

发布于 2011-03-03 04:01:53

因此,如果格式相同,则可以使用正则表达式并将值收集到组中。

如下所示:

代码语言:javascript
复制
String input = "Name, Show starts on 14/08/09, your ticket is booked on 14/08/09";
String regex = "([a-zA-Z \t]*),.*(\\d\\d/\\d\\d/\\d\\d),.*(\\d\\d/\\d\\d/\\d\\d)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher( input );
if( matcher.matches() && matcher.groupCount() == 4) //group 0 is always the entire expression
{
  String name = matcher.group(1);
  String startDate = matcher.group(2);
  String bookedDate = matcher.group(3);
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-03 04:10:09

这个怎么样?

代码语言:javascript
复制
String s = "Name, Show starts on 14/08/09, your ticket is booked on 14/08/09";

String wordsPattern = "[\\w\\s]+";
String datePattern = "\\d{1,2}\\/\\d{1,2}\\/\\d{1,2}";
Pattern p = Pattern.compile(String.format("(%s),%s(%s),%s(%s)", wordsPattern, wordsPattern, datePattern, wordsPattern, datePattern));

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy");
Matcher m = p.matcher(s);
m.find();

String name = m.group(1);
Date startDate = sdf.parse(m.group(2));
Date bookedDate = sdf.parse(m.group(3));

System.out.println("name: " + name);
System.out.println("startDate: " + startDate);
System.out.println("bookedDate: " + bookedDate);

结果是:

代码语言:javascript
复制
name: Name
startDate: Wed Apr 08 00:00:00 CDT 2009
bookedDate: Wed Apr 08 00:00:00 CDT 2009
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5172557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档