我正在解析文件中的文本并尝试查看时间。我首先需要检查文本中是否有时间。文本中唯一一致的模式是所有时间都表示为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"或者#34;发生在06:22"我被告知没有比赛。如何检查我的文本中是否包含时间模式?
答案 0 :(得分:2)
matches
检查整个字符串是否与使用的正则表达式匹配,并且由于只有部分正则表达式匹配,因此结果为false
。
方法是在正则表达式的开头和结尾添加.*
,以便在匹配的子字符串之前或之后匹配部分。
textWithTime.matches(".*\\d\\d?:\\d\\d.*");
但是这个解决方案必须迭代字符串的所有字符来评估它。
更好的方法是使用find()
类中的Matcher
方法,它将在第一次匹配后停止迭代(或者如果找不到正则表达式匹配则返回false
。)< / p>
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");
}
答案 1 :(得分:0)
要找到这样的模式,最好使用正则表达式,如下所示:
Pattern timePattern = Pattern.compile("[0-2][0-9]:[0-5][0-9]");
现在,您可以创建Matcher
以查看Pattern
中是否找到CharSequence
,如下所示:
Matcher timeMatcher = timePattern.matcher(textWithTime);
while(timeMatcher.find()) {
System.out.println("Found time " + timeMatcher.group() + " in the text!";
}
请查看the API for java.util.regex,了解Pattern
和Matcher
提供的其他方法。正则表达式非常强大。