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

时间:2014-05-02 19:18:30

标签: java regex string

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

2 个答案:

答案 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,了解PatternMatcher提供的其他方法。正则表达式非常强大。