java - Java 中正则表达式的问题

标签 java regex string

在我当前的项目中,我面临着一个可以用两种模式构造的字符串的问题。它仅由 1 个自然数或 2 个自然数组成,中间有“-”。我需要能够区分它们。我想为此使用以下代码:

if (STRING.matches("*-*"))
{
    //Do something
} else {
    //Do something else
}

但是,它给了我以下错误:

Exception in thread "Thread-2" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0

我还尝试将“#”放在字符串的开头(当然我将其添加到模式中),但这只会导致执行 if-query 的 else 部分。

希望你能帮助我

isi_ko

最佳答案

您的正则表达式不正确,因为星号是一个元字符,前面需要一个模式。你可以尝试这样的事情:

if (STRING.matches("[^-]*-[^-]*"))
{
    //Do something
} else {
    //Do something else
}

更好的方法可能是使用 String#split("-") 并将其放入数组中。然后,您可以检查该数组的长度以查看其中有多少个数字,然后对每个子字符串使用 Integer.parseInt 来获取自然数。

另一种方法是使用匹配器来查找多个组。如果 (\d)* 是匹配自然数的正则表达式,您可以这样做:

Pattern pattern = Pattern.compile("(\\d)*");
Matcher matcher = pattern.matcher(input);
matcher.find();
String first = matcher.group();
if (matcher.find()) {
  String second = matcher.group(); //this means there are two numbers
}

关于java - Java 中正则表达式的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61310812/

相关文章:

javascript - 使用 jQuery 进行时间/日期识别

c# - 如何从 C# 中的 url 获取子字符串或字符串的一部分

c - 给定两个字符串,找到两个字符串共有的单词

Java - 字符串数组上的空指针异常

java - 如何从 Java 字符串中删除版权字符和其他非 ASCII 字符?

类似于c++ map的java库

java - 为什么在 java.util.Collections 中声明静态 java.util.Collections.fill() 方法而不是在 java.util.AbstractList 中声明实例方法?

python - 如何从网址中提取标题?

ios - stringByReplacingOccurrencesOfString 方法调用不会更改我调用它的字符串

java - 正确缩放 BigDecimal