如何在Java中检查字符串是否包含日期?
如何检查字符串是否包含此表单的日期: 2012年1月15日星期日美国东部时间下午7:36 我正在处理的数据包含大量字符串。但我要查找的字符串类型包含2或3个单词的名称和日期。我正在检查日期以识别这些类型的字符串 我已经找到了这种约会的简单格式如何在Java中检查字符串是否包含日期?,java,regex,string,date,simpledateformat,Java,Regex,String,Date,Simpledateformat,如何检查字符串是否包含此表单的日期: 2012年1月15日星期日美国东部时间下午7:36 我正在处理的数据包含大量字符串。但我要查找的字符串类型包含2或3个单词的名称和日期。我正在检查日期以识别这些类型的字符串 我已经找到了这种约会的简单格式 String string1 = "Rahul Chowdhury Sunday, January 15, 2012 at 7:37pm EST"; String string2 = "Aritra Sinha Nirmal
String string1 = "Rahul Chowdhury Sunday, January 15, 2012 at 7:37pm EST";
String string2 = "Aritra Sinha Nirmal Friday, April 1, 2016 at 10:16pm EDT";
SimpleDateFormat format = new SimpleDateFormat("EEEEE, MMM dd, yyyy 'at' hh:mmaa z");
但我不知道如何进一步进行
我猜正则表达式可能有用,但我不知道当月/日的名称长度不同时如何实现。i、 “五月”比“十二月”短得多
我想知道是否有一个解决方案使用正则表达式或更简单的解决方案
我知道还有其他线程问类似的问题,但它们没有回答我的问题。您可以使用SimpleDataFormat解析方法对其进行测试。要继续您的代码,请在代码周围加上try/catch,例如:
try {
Date date = format.parse(string);
} catch (ParseException e) {
//the string is not applicable to the date format
}
如果日期是一个字符串,它遵循SimpleDataFormat中的格式准则,则将成功创建日期 你可以先用正则表达式检查你的约会对象:
\w+,\s+\w+\s+\d+\,\s+\d+\s+at\s+\d+:\d+(pm|am)\s+\w{3,4}
这个正则表达式与这两个正则表达式都匹配
Rahul Chowdhury Sunday, January 15, 2012 at 7:37pm EST
Aritra Sinha Nirmal Friday, April 1, 2016 at 10:16pm EDT
在文本中找到匹配项后,可以使用SimpleDateFormat
检查其格式是否正确
String input = "Rahul Chowdhury Sunday, January 15, 2012 at 7:37pm EST";
String regex = "(\\w+,\\s+\\w+\\s+\\d+\\,\\s+\\d+\\s+at\\s+\\d+:\\d+(pm|am)\\s+\\w{3,4})";
Matcher matcher = Pattern.compile(regex).matcher(input);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
这将打印:
Sunday, January 15, 2012 at 7:37pm EST
如果您不想使用
Regex
,您可以这样做(我知道这很痛苦,但只是另一种方法)
输出
Rahul Chowdhury Sunday January 15 2012 7:36pm EST
7 36 pm
使用
format.parse(string)
如果格式不匹配,它将抛出ParseExceptionA正则表达式来检查一周中的几天,而月份可能会很长。您能更好地描述实际问题吗?您认为需要检查字符串以确定它们是否是日期?为什么?只要试着将其解析为日期并捕获异常。没有必要重复所有这些努力。字符串不仅仅有日期。因此,符合我的条件但也包含其他单词的字符串将抛出异常,我将错过它们。我使用的字符串不仅仅包含日期。因此,这将始终引发异常。如果字符串包含的不仅仅是日期,它仍将对其进行分析,并创建一个日期(如果该字符串首先包含日期,而字符串的其余部分作为后缀)。因此,对于字符串:“2012年1月15日美国东部时间下午7:37,拉胡尔·乔杜里星期日”,它将起作用。如果翻转顺序太棘手,您只能解析子字符串-只需运行:尝试{Date Date=format.parse(string.substring(string.indexOf(“,”)+1);}catch(ParseException e){//该字符串不适用于日期格式}我爱您。非常感谢您。我想您至少需要\w{3,4}
结尾;一些时区缩写为四个字母。您可能需要也可能不需要容纳更多的时区名称,如Z
或+01:00
@OleV.V。感谢您的建议,我将更新我的答案。
Rahul Chowdhury Sunday January 15 2012 7:36pm EST
7 36 pm