我的正则表达式没有';与某个输入不匹配-java

我的正则表达式没有';与某个输入不匹配-java,java,regex,command-line,boolean,Java,Regex,Command Line,Boolean,我使用以下正则表达式:“(?([0-9]+)-?)+” 我试着看看两个数字之间是否有负号。正则表达式应该在数字之前允许负数,但在它们之间不允许负数 我使用以下命令行输入测试它:“46825-3439”,程序返回预期返回的内容(布尔值为true)。 另外,当命令行输入为:“-46825-3439”时,程序工作并将false返回给布尔值(预期值)。但是,每当我输入“4-6 8 2 5-3 4 3 9”时,程序就会显示以下错误: Exception in thread "main" java.lang

我使用以下正则表达式:“(?([0-9]+)-?)+”

我试着看看两个数字之间是否有负号。正则表达式应该在数字之前允许负数,但在它们之间不允许负数

我使用以下命令行输入测试它:“46825-3439”,程序返回预期返回的内容(布尔值为true)。 另外,当命令行输入为:“-46825-3439”时,程序工作并将false返回给布尔值(预期值)。但是,每当我输入“4-6 8 2 5-3 4 3 9”时,程序就会显示以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "5-3"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at Ex5.main(Ex5.java:32)

这意味着我的布尔值为false,我不知道为什么,因为它应该返回true。

请查看您的:只有
46825-3439
行作为整行匹配,而
4-6825-3439
-46825-3439
4-6825-3439
部分匹配

如果得到false,则表示您正在使用
.matches()
方法。你可以用

(?: ?-?([0-9]+))+
看这个

要获得与当前相同的功能,并且如果将其与
.matches()
一起使用,您将匹配上面提供的所有四个字符串,组1将包含捕获的最后一个数字块(由于模式包含重复捕获组,因此只有最后一个数字将存储在
.Group(1)

详细信息

  • ^
    (隐含在
    .matches()
    )中)-字符串的开头
  • (?:?-([0-9]+)+
    -1次或多次出现:
    • -可选空格
    • -?
      -可选的
    • ([0-9]+)
      -第1组:一个或多个数字
  • $
    (隐含在
    .matches()
    )中)-字符串结尾
您可以尝试(\s)?\d+(\d)?+ 它适用于所有情况。请让我知道如果任何案件失败。
对于Java代码,您可以使用(\s)?\d+(\-\d)?++

Adrien,只是一个提示,不要将所有代码都放在问题中,而是将问题限制在一段代码中。例如:为什么正则表达式“(?([0-9]+)-?)+”与输入“4-6 8 2 5-3 4 3 9”不匹配?您可以使用
布尔hasMinuses=listString.contains(“-”)
?如果是这样的话,这将节省您调试正则表达式的时间。不,我不能,我想允许-但只有当它不在数字后面时,我才更改了我的帖子,看起来您知道布尔值为false的原因。你的正则表达式没有赶上你的5-3。你可以试试正则表达式检查器,就像它比上次更糟糕一样!现在,无论我输入什么值,布尔值都是真的,即使只是“45 6 9”“8 63 3”@AdrienAacha,您还没有解释它应该如何工作。你只抱怨了3行不匹配。我解释了原因并提出了一种模式,我明确地说,如果减号在两个数字之间,它应该返回布尔值为真,而不是在一个数字之前number@AdrienAacha那你所需要的一切,对吗?要检测字符串中是否有数字连字符数字?看,或者这是第二次尝试。看见