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以查看Pattern
和Matcher
提供的其他方法。 正则表达式非常强大。