Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中检查字符串是否包含日期?_Java_Regex_String_Date_Simpledateformat - Fatal编程技术网

如何在Java中检查字符串是否包含日期?

如何在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

如何检查字符串是否包含此表单的日期:

2012年1月15日星期日美国东部时间下午7:36

我正在处理的数据包含大量字符串。但我要查找的字符串类型包含2或3个单词的名称和日期。我正在检查日期以识别这些类型的字符串

我已经找到了这种约会的简单格式

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