StringUtils.isNumeric爲「」返回true,爲7.8返回false。這當然是有記錄的行爲,但對我來說真的不是最方便的。是否還有其他的東西(理想情況下是commons.lang)提供了一個isActuallyNumeric?是否有替代StringUtils.isNumeric的意思呢?
回答
嘗試isNumber(String)
從org.apache.commons.lang.math.NumberUtils
。
檢查字符串[是]是否爲有效的Java編號。
有效數字包括用0x限定符標記的十六進制數,用科學記數法標記的 以及用類型限定符標記的數字(例如 123L)。
Null
和空字符串將返回false
。
更新 -
isNumber(String)
現在已經過時了。改爲使用isCreatable(String)
。
謝謝eav指出。
或者你可以檢查,看看是否有字符非數字像這樣的比賽..
if(myStr.replaceAll("^$"," ").matches("[^\\d\\.]"))
那麼你知道那裏面有東西,是不是0-9和/或一個。
這裏是JavaScript的當量(修改字符串實驗)...
正則表達式不會找到(並拒絕)有多個小數點的字符串,例如「123.9.1」 – bdares
我認爲你的意思是「[^ \\ D \\。]」...否則你將有一個不好轉義字符序列。 –
@tim bender,是的抱歉...這是一個錯字,因爲是大寫字母D –
這是不完全在commons.lang
,但它會奏效。
try {
double d = Double.parseDouble(string);
// string is a number
} catch (NumberFormatException e) {
// string is not a number
}
此解決方案假設您只打算在雙打的域中使用基數爲10的數字。大多數情況下這不是一個錯誤的假設,而且這個解決方案不會產生任何新的依賴關係。 +1 – bdares
你應該使用
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
。您可以通過文檔獲取更多信息。
- 1. waitForAllLinks是什麼意思,是否有任何webdriver的替代?
- 2. 什麼呢「......」的意思是在CSS
- 3. '延期替代'是什麼意思?
- 4. '= |'是什麼意思運營商呢?
- 5. java:它是什麼意思呢:acquiredMarks = se.nextInt();
- 6. href後有什麼意思呢?
- 7. 有沒有人知道是什麼意思呢「objc://」 URL中
- 8. 什麼呢$(這)在jquery的意思
- 9. 什麼呢的setState:函數(){意思
- 10. 什麼呢(?=。* [^ A-ZA-Z])的意思
- 11. 是否有替代MySQL的
- 12. 替代RedGate ReadyRoll呢?
- 13. 代碼是什麼意思?
- 14. 0x0F是什麼意思?這個代碼是什麼意思?
- 15. 在ADT替代品的開頭,`\`是什麼意思?
- 16. 什麼意思?在c代碼的意思是
- 17. 是什麼意思?=在僞代碼中使用時的意思?
- 18. 代碼的意思是什麼意思出於好奇
- 19. 什麼呢| =(單管等)和=(單個號相同)的意思是
- 20. 什麼呢**/*。java的意思是在Java類路徑
- 21. 這是什麼意思?這是否是代表性?
- 22. 是否有替代方案
- 23. 是否有替代file_get_contents?
- 24. 是否有替代HTML?
- 25. 是否有替代npmzip?
- 26. 是否有替代javax.mail.search?
- 27. 是否有替代mysql_lookup?
- 28. 是否有替代MYSQL HAVING
- 29. 是否有替代SSH
- 30. 是否有替代int64包?
一些像「5.f」或「5.d」的字符串將會被註冊爲數字(我猜測它與雙或浮點符號有關),但其他的像5.x不會。 – dstrube
這稍微好點。不幸的是:'** + 2 **'原來不是isNumber()。 – will
幸運的是,isNumber(「** - 2 **」)給出_true_。 – will