我試圖寫一個REGEX來接受1-100之間的數字。如果它接受從1到無窮大的所有事情,那將是非常棒的,但這可能很複雜 - 或者說不可能。對於數字1到100的Java REGEX
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}//end boolean.
我試圖寫一個REGEX來接受1-100之間的數字。如果它接受從1到無窮大的所有事情,那將是非常棒的,但這可能很複雜 - 或者說不可能。對於數字1到100的Java REGEX
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}//end boolean.
這將是巨大的,如果它接受了從1到無窮大,但是這可能是複雜的 - 或不可能的。
"[1-9]\\d*"
怎麼樣?
這將接受一個非零數字後接任意數字序列。換句話說,任何正整數。
快速思考,因爲輸入是一個字符串,它可能包含一個0開始的字符串,如「007」,也許更好的答案是: '0 * [1-9] \\ d *' – Jorge
public static boolean isNumeric(String str) throws NumberFormatException {
int i = Integer.parseInt(str);
return i > 0 && i < 100; //Arbitrary numbers within range of int
}
不使用正則表達式,但這應該完成同樣的事情。將字符串轉換爲一個整數,然後檢查它是否在你想要的範圍內。
這會如果字符串包含非數字字符,則會引發異常。 – Dodd10x
解析兩次是沒有必要的,並且用'NumberFormatException'將它包裝在try catch中,並且如果OP想要有無窮大整數可能會溢出。 –
這兩個意見都是真實的,這只是一個快速而骯髒的例子,讓他指出一個可能有所幫助的方向。我將編輯以儘快解決這些問題。 – csmckelvey
如果你想真的徹底,你可以使用"-?(0|([1-9][0-9]*))\.?[0-9]*"
這應該會給你所有的數字從-infinity到+ inifinity。擺脫-?
會給你所有的積極的數字。 "0|(-?[1-9][0-9]*)"
應該給你從-infinity到+ infinity的所有整數。 "[1-9][0-9]*"
會給你所有大於0的整數。
爲什麼你想使用正則表達式來完成這個任務?只需將'str'轉換爲'int',然後檢查範圍。這會容易得多。 –
@RohitJain如下所述,這可能會導致拋出異常。 – marisbest2