我的正则表达式没有';与某个输入不匹配-java
我使用以下正则表达式:“(?([0-9]+)-?)+” 我试着看看两个数字之间是否有负号。正则表达式应该在数字之前允许负数,但在它们之间不允许负数 我使用以下命令行输入测试它:“46825-3439”,程序返回预期返回的内容(布尔值为true)。 另外,当命令行输入为:“-46825-3439”时,程序工作并将false返回给布尔值(预期值)。但是,每当我输入“4-6 8 2 5-3 4 3 9”时,程序就会显示以下错误:我的正则表达式没有';与某个输入不匹配-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
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()
-1次或多次出现:(?:?-([0-9]+)+
-可选空格?
-可选的-?
?
-第1组:一个或多个数字([0-9]+)
(隐含在$
)中)-字符串结尾.matches()
对于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那你所需要的一切,对吗?要检测字符串中是否有数字连字符数字?看,或者这是第二次尝试。看见