2012-05-31 29 views

回答

29

嘗試isNumber(String)org.apache.commons.lang.math.NumberUtils

檢查字符串[是]是否爲有效的Java編號。

有效數字包括用0x限定符標記的十六進制數,用科學記數法標記的 以及用類型限定符標記的數字(例如 123L)。

Null和空字符串將返回false

更新 -

isNumber(String)現在已經過時了。改爲使用isCreatable(String)

謝謝eav指出。

+1

一些像「5.f」或「5.d」的字符串將會被註冊爲數字(我猜測它與雙或浮點符號有關),但其他的像5.x不會。 – dstrube

+0

這稍微好點。不幸的是:'** + 2 **'原來不是isNumber()。 – will

+2

幸運的是,isNumber(「** - 2 **」)給出_true_。 – will

1

或者你可以檢查,看看是否有字符非數字像這樣的比賽..

if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]"))那麼你知道那裏面有東西,是不是0-9和/或一個。

這裏是JavaScript的當量(修改字符串實驗)...

http://jsfiddle.net/LzZE6/

+2

正則表達式不會找到(並拒絕)有多個小數點的字符串,例如「123.9.1」 – bdares

+0

我認爲你的意思是「[^ \\ D \\。]」...否則你將有一個不好轉義字符序列。 –

+0

@tim bender,是的抱歉...這是一個錯字,因爲是大寫字母D –

5

這是不完全在commons.lang,但它會奏效。

try { 
    double d = Double.parseDouble(string); 
    // string is a number 
} catch (NumberFormatException e) { 
    // string is not a number 
} 
+1

此解決方案假設您只打算在雙打的域中使用基數爲10的數字。大多數情況下這不是一個錯誤的假設,而且這個解決方案不會產生任何新的依賴關係。 +1 – bdares

2

NumberUtils.isNumber已棄用。

你應該使用

NumberUtils.isCreatable 

NumberUtils.isParsable 

他們都支持小數點值:

  • NumberUtils.isCreatable支持十六進制,八進制數,科學計數法和數字標記與類型限定符(例如123L)。無效的八進制值將返回false(例如09)。如果你想得到它的價值,你應該使用NumberUtils.createNumber
  • NumberUtils.isParsable只支持0~9和小數點(.),任何其他字符(例如空間或其他任何東西)將返回false

順便說一下,StringUtils.isNumberic的工具在commons-lang和commons-lang3之間有一些不同。在commons-lang中,StringUtils.isNumberic("")true。但在commons-lang3中,StringUtils.isNumberic("")false。您可以通過文檔獲取更多信息。