java - 在字符串中搜索模式

标签 java string

我有一个输入字符串如下:

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/

相关文章:

C++ <algorithm> 替换所有不工作的事件

java - 返回数组中的最大值?

java - 奇怪的字符串越界异常

string - 如何检查字符串是否为数字 Julia

ios - 从复杂的NSString中提取日期

c++ - 为什么整数到字符串的转换直到现在才明确包含在 C++ 中?

java - 用eclipse升级软件后出错

java - Jpa存储库 : NoSuchBeanDefinitionException

java - 选择在 mysql 中触发的查询错误

java - Kafka Streams DSL 到处理器 API 之间有什么区别