Java:检查String中是否有1次或更多次

我正在解析文件中的文本并试图查看时间。 我首先需要检查文本中是否有时间。 文本中唯一一致的模式是所有时间都表示为1或2位数:2位数。 我写了一些java代码,看看我是否能找到我正在看的字符串中有一次或多次。

String timePattern = "\\d\\d?:\\d\\d"; if(textWithTime.matches(timePattern)){ System.out.println("MATCH"); } else { System.out.println("NO MATCH"); } 

然而,当我的String textWithTime等于“06:45/07:52/10:27”或“发生在06:22”时,我被告知没有匹配。 如何查看我的文本中是否有时间模式?

matches检查整个字符串是否与使用的正则表达式匹配,并且由于只有部分正则表达式匹配,因此结果为false

在你的正则表达式的开头和结尾处添加.*以使其匹配匹配子字符串之前或之后的部分。

 textWithTime.matches(".*\\d\\d?:\\d\\d.*"); 

但是这个解决方案必须迭代字符串的所有字符来评估它。

更好的方法是使用Matcher类中的find()方法,它将在第一次匹配后停止迭代(或者在没有找到正则表达式匹配的情况下返回false )。

 Pattern p = Pattern.compile("\\d\\d?:\\d\\d"); Matcher m = p.matcher(textWithTime); if (m.find()){ System.out.println("MATCH"); } else { System.out.println("NO MATCH"); } 

要找到这样的模式,最好使用正则表达式,如下所示:

 Pattern timePattern = Pattern.compile("[0-2][0-9]:[0-5][0-9]"); 

现在,您可以创建一个Matcher来查看是否在CharSequence找到此Pattern ,如下所示:

 Matcher timeMatcher = timePattern.matcher(textWithTime); while(timeMatcher.find()) { System.out.println("Found time " + timeMatcher.group() + " in the text!"; } 

查看java.util.regex的API以查看PatternMatcher提供的其他方法。 正则表达式非常强大。