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

标签 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");
}

然而,当我的字符串 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");
}

关于Java:检查字符串中是否有1次或多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23435430/

相关文章:

c# - ASP.NET 正则表达式问题

c - 给定字符串和整数 C 文件,查找第 N 个单词

java - 使用 Web-API 和 Java 接受 Steam 的交易报价

javascript - 使用 Javascript 正则表达式匹配重音字符

java - 使用 Spring AOP 配置 Hibernate session

c# - .Net 正则表达式 : what is the word character\w?

java - 拆分字符串多种模式

javascript - 导入字体的固定字符宽度

Java Tcp Socket 管理数据包重传

java - 如何从 Twitter 流获取样本并打印到屏幕