【问题标题】:Problems with Regex in JavaJava中的正则表达式问题
【发布时间】:2020-04-19 19:57:24
【问题描述】:

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

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

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

线程“Thread-2”中的异常 java.util.regex.PatternSyntaxException: 在索引 0 附近悬挂元字符“*”

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

希望你能帮助我

isi_ko

【问题讨论】:

  • 你读过documetationjava.util.regex.Pattern 吗?它解释了 java 的正则表达式语法。

标签: java regex string


【解决方案1】:

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

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

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

另一种方法是使用 Matcher 来查找多个组。如果(\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
}

【讨论】:

  • 感谢工作:D(编辑:我使用的版本与 String.split("-");)
猜你喜欢
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多