2017-10-18 174 views
1

我使用以下正則表達式:「(?([0-9] +) - ?)+」。我的正則表達式與某個輸入不匹配 - java

我試着看看兩個數字之間是否有負號。正則表達式應該允許在數字之前使用缺陷,但不能在數字之間使用。

我用下面的命令行輸入測試它:「4 6 8 2 5-3 4 3 9」,程序返回它期望返回的內容(true爲一個布爾值)。 另外,當命令行輸入是:「-4 6 8 2 5 -3 4 3 9」時,程序工作並將假返回到布爾值(預期)。但是,每當我輸入:「4 -6 8 2 4月5日至3日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) 

這意味着我的布爾是假的,我不知道爲什麼,因爲它應該返回true。

+0

阿德里安,只是一個提示,而不是把所有的代碼中的問題,限制你的單片代碼的問題。例如:爲什麼正則表達式「(?([0-9] +) - ?)+」不匹配輸入‘4-6 8 2 4月5日至3日3月9日’ – Doleron

+0

你能使用'布爾hasMinuses = listString.contains(‘ - ’)'如果是這樣,這將節省您的調試。正則表達式 – dave

+0

哦,不,我不能,我想允許 - 但只有當它的一些 –

回答

1

請看看你的(?([0-9]+)-?)+ regex demo:雖然4 -6 8 2 5-3 4 3 9-4 6 8 2 5 -3 4 3 94 -6 8 2 5-3 4 3 9是部分匹配的只有4 6 8 2 5-3 4 3 9線相匹配的整體利益。

如果您獲得false,這意味着您正在使用.matches()方法。您可以使用

(?: ?-?([0-9]+))+ 

看到這個regex demo

爲了獲得與當前相同的功能,並且如果將它與.matches()一起使用,您將匹配上面提供的所有四個字符串,而組1將包含最後一批捕獲的數字(因爲該模式包含重複捕獲組,只有最後一個號碼將被存儲在.group(1))。

詳細

  • ^(隱含在.matches()) - 串的開始
  • (?: ?-?([0-9]+))+ - 1個或多個的:
    • ? - 任選的空間
    • -? - 一個可選?
    • ([0-9]+) - 第1組:一個或多個數字
  • $(在.matches()暗示) - 字符串的結尾
+0

它的效果比上次更差!現在,無論輸入什麼值,布​​爾值都是正確的,即使只是「4 5 6 9」「8 63 3」 –

+0

@AdrienAacha您還沒有解釋它應該如何工作。您只抱怨3條線路沒有匹配。我解釋了爲什麼,並提出了一個模式。 –

+0

我已經明確地說,如果減號是兩個號碼而不是在它介於它應返回true一個布爾值只是一些 –

0

您可以嘗試((\ s)\ d +( - \ d? )?)+ 它適用於所有情況。請讓我知道是否有任何案件失敗。 對於Java代碼,你可以使用((\ s)\ d +(\ - ?\ d))+