2014-09-20 39 views
0

我試圖提高我的正則表達式技能,所以我做了一個基本的計算器來練習模式匹配。提示用戶輸入兩個整數值到控制檯中,用逗號分隔,沒有空格。我並不擔心int的值太大,我只想覆蓋用戶輸入-0的情況。正數0,所有其他負值和正值都應該被接受。Java正則表達式匹配來自用戶輸入的整數

掃描器對象抓取用戶的輸入並將其存儲在字符串變量中。然後將此變量傳遞給一個具有模式和匹配器的方法,該方法執行匹配並返回匹配與否的布爾值。

String userInput = scanner.next(); 

//look for only integers, especially excluding -0 
if(checkUserMathInputIsGood("REGEX", userInput)) 
    { 
     int sum; 
     String[] twoNumbersToAdd = userInput.split(","); 

     sum = Integer.parseInt(twoNumbersToAdd[0]) + Integer.parseInt(twoNumbersToAdd[1]); 

     System.out.println(sum); 
    } 

經過數小時的淘洗stackoverflow,javadocs等,我發現了幾乎工作的一些解決方案。

http://www.vogella.com/tutorials/JavaRegularExpressions/article.html#regex_negative

http://www.regexplanet.com/advanced/java/index.html

Java regular expression for negative numbers?

與開頭的模式例如 「T(等等等等)」 沒有在所有的工作,而且我找不到什麼T A參考應該完成。我已經接近:

"-{0,1}(?!0)\\d+,-{0,1}(?!0)\\d+" 

打破它,這似乎是說:允許一個負號至少爲0,最多爲1次。如果負號的所謂「負向預測」爲真,則不允許爲0。然後允許至少有一個整數長的整數值。但是,這導致正則表達式拒絕0以及-0。輸入的

實例應當被接受的:
2,3
22,-4
-555,-9輸入這應該是的
0,88
0,0

實例被拒絕:
-0,9
432,-O
-0,-O

不限ħ艾爾普或建議非常感謝。

+1

你能給允許輸入的例子嗎? – 2014-09-20 03:28:48

+0

完成,對不起,我應該做到這一點。編輯:我想也許我可以用我的正則表達式檢查方法兩次。例如,通過一次檢查整數,然後再次檢查-0不存在。但我覺得這應該是可行的。 – Yankee 2014-09-20 04:04:48

回答

0

如果我理解正確的要求,那麼它應該是

+0

感謝您的回覆,但我相信這將允許每個整數,包括我試圖阻止的-0情況。編輯:通過防止我的意思是我希望正則表達式匹配器拒絕除INTEGER,INTEGER以外的所有輸入,也拒絕-0的情況。 – Yankee 2014-09-20 03:47:17

0
^(?:(?:\+?\d+)|(?:-(?!0*,)\d+)),(?:(?:\+?\d+)|(?:-(?!0*$)\d+))$ 

Demo.

說明:

^// match start of line or text 
(?:// match either: 
    (?:// option 1: 
     \+? // a "+" if possible 
     \d+ // and any number of digits 
    ) 
    |// or 
    (?:// option 2: 
     - // a "-" sign 
     (?!//negative lookahead assertion: do NOT match if next is... 
      0*,//...any number of zeroes and a comma 
     ) 
     \d+//if we've made it this far, then we know this integer is NOT zero. Match any number of digits. 
    ) 
) 
,// a comma. 
(?:// this pattern is basically the same as the one for the first number. 
    (?: 
     \+? 
     \d+ 
    ) 
    | 
    (?: 
     - 
     (?! 
      0*$// except this matches the end of a line or text instead of a comma. 
     ) 
     \d+ 
    ) 
) 
$// end of line or text. 
+0

本學期一結束,我就有時間了,我會檢查你做了什麼,看看它是否適用於我必須確認此線程的答案的問題。 – Yankee 2014-11-08 10:34:35