小编典典

Java:检查字符串中是否有1次或多次

java

我正在从文件中解析文本并尝试查看时间。我首先需要检查文本中是否有时间。文本中唯一一致的模式是所有时间都表示为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”时,我被告知没有匹配项。如何检查文本中是否有时间模式?


阅读 279

收藏
2020-11-26

共1个答案

小编典典

matches检查整个字符串是否与使用的正则表达式匹配,并且由于该正则表达式只有一部分可以匹配false,因此您将得到结果。

解决方法是.*在正则表达式的开头和结尾处添加内容,以使其与匹配的子字符串之前或之后的部分匹配。

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

但是此解决方案必须遍历字符串的所有字符才能对其进行评估。

更好的方法是使用类中的find()方法,Matcher该方法将在第一个匹配项后停止迭代(或者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");
}
2020-11-26