我正在从文件中解析文本并尝试查看时间。我首先需要检查文本中是否有时间。文本中唯一一致的模式是所有时间都表示为1或2位数字:2位数字。我编写了一些Java代码来查看是否可以找到正在查看的String一次或多次。
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,因此您将得到结果。
matches
false
解决方法是.*在正则表达式的开头和结尾处添加内容,以使其与匹配的子字符串之前或之后的部分匹配。
.*
textWithTime.matches(".*\\d\\d?:\\d\\d.*");
但是此解决方案必须遍历字符串的所有字符才能对其进行评估。
更好的方法是使用类中的find()方法,Matcher该方法将在第一个匹配项后停止迭代(或者false在找不到正则表达式匹配项的情况下返回)。
find()
Matcher
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"); }