我有一个输入字符串如下:
john is a StartDate 10\11\2012 EndDate 15\11\2012 john is a boy john is StartDate john
我想从上面的字符串中提取两个日期 StartDate 和 EndDate。
但是,我不能只搜索单词 StartDate,因为从字符串末尾可以看出,StartDate 可能作为一个独立的单词出现。我不能首先考虑,因为不能保证带有日期的 StartDate 单词永远是第一个。
因此解决方案是一起搜索模式 StartDate % EndDate % 。即 StartDate 和 EndDate 词在一起。
实现这一目标的最佳方法是什么?
我能想到的一个解决方案是对于单词 StartDate 的每个实例,获取接下来四个单词(包括 StartDate)的子字符串并在该子字符串中搜索单词 EndDate。如果它存在,我们就有正确的子字符串,否则转到 StartDate 单词的下一个实例并重复该任务。
最佳答案
使用正则表达式提取的快速但肮脏的方法(replaceFirst
):
String input = "john is a StartDate 10\\11\\2012 EndDate 15\\11\\2012 john is a boy john is StartDate john";
String startDate = input.replaceFirst(".*(StartDate \\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");
String endDate = input.replaceFirst(".*(EndDate \\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");
System.out.println(startDate);
System.out.println(endDate);
如果您只想要日期:
String startDate = input.replaceFirst(".*StartDate (\\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");
String endDate = input.replaceFirst(".*EndDate (\\d{1,2}\\\\\\d{1,2}\\\\\\d{4}).*", "$1");
关于java - 在字符串中搜索模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11426044/