在我当前的项目中,我面临着一个可以用两种模式构造的字符串的问题。它仅由 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/