Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中正则表达式的问题_Java_Regex_String - Fatal编程技术网

Java中正则表达式的问题

Java中正则表达式的问题,java,regex,string,Java,Regex,String,在我当前的项目中,我遇到了一个问题,即拥有一个可以用两种模式构造的字符串。它只由一个自然数或两个中间带“-”的自然数组成。我需要能够区分它们。我想为此使用以下代码: if (STRING.matches("*-*")) { //Do something } else { //Do something else } 但是,它给了我以下错误: 线程“thread-2”java.util.regex.PatternSyntaxException中的异常: 索引0附近悬空的元字符“*”

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

if (STRING.matches("*-*"))
{
    //Do something
} else {
    //Do something else
}
但是,它给了我以下错误:

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

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

希望你能帮助我


isi_ko

您的正则表达式不正确,因为星号是一个元字符,需要在它前面加一个模式。您可以尝试以下方法:

if (STRING.matches("[^-]*-[^-]*"))
{
    //Do something
} else {
    //Do something else
}
更好的方法可能是使用字符串#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
}

您的正则表达式不正确,因为星号是一个元字符,在它前面需要一个模式。您可以尝试以下方法:

if (STRING.matches("[^-]*-[^-]*"))
{
    //Do something
} else {
    //Do something else
}
更好的方法可能是使用字符串#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.util.regex.Pattern类的相关内容吗?它解释了java的正则表达式语法。您是否阅读了for类
java.util.regex.Pattern
?它解释了java的正则表达式语法。感谢:D(编辑:我使用了带有String.split(“-”)的版本)感谢:D(编辑:我使用了带有String.split(“-”)的版本)