Java中怎么样检查一个字符串是不是数字呢
問題:Java中怎么樣檢查一個字符串是不是數(shù)字呢
在解析之前,怎么樣檢查一個字符串是不是數(shù)字呢
回答一
這些通常是由一個簡單的用戶自定義函數(shù)去解決的(即,自帶的 “isNumeric” 函數(shù))
例如
public static boolean isNumeric(String str) { try { Double.parseDouble(str); return true;} catch(NumberFormatException e){ return false; } }但是,如果你整天調(diào)用這個函數(shù),并且你又希望這個檢查是由于不是一個數(shù)字而失敗拋出異常,那么那個機(jī)制性能不會很好的,因?yàn)槟忝看问《家獟伋霎惓?#xff0c;這是一個代價(jià)很大的操作
一個可供替代的選擇就是使用正則表達(dá)式去檢查是否為數(shù)字
public static boolean isNumeric(String str) {return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal. }對于正則表達(dá)式的機(jī)制可千萬要小心,因?yàn)樗鼤〉?#xff0c;如果你用的不是阿拉伯字母(即數(shù)字0到9).這是因?yàn)椤?d”那部分正則表達(dá)式只匹配0-9的,并且它也不能有效地識別到國際上數(shù)字
或者另一個可供替代的選擇就是用java.text.NumberFormat 這個對象了,我們可以檢查 parser position的位置是否在字符串的末尾。如果是的話,我們就可以認(rèn)為整個字符串都是一個數(shù)字了
public static boolean isNumeric(String str) {
NumberFormat formatter = NumberFormat.getInstance();
ParsePosition pos = new ParsePosition(0);
formatter.parse(str, pos);
return str.length() == pos.getIndex();
}
回答二
在Apache Commons Lang 3.5 以上的版本: NumberUtils.isCreatable 或者 StringUtils.isNumeric.
在Apache Commons Lang 3.4 以下的版本: NumberUtils.isNumber 或者 StringUtils.isNumeric.
你也可以使用StringUtils.isNumericSpace,它會在空字符串的情況下返回true并且忽略字符串內(nèi)部的空格。另一個方法就是使用Java中經(jīng)常用來檢查是否可被解析為數(shù)字的NumberUtils.isParsable(鏈接中的Java文檔包含每種方法的詳細(xì)實(shí)例)
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/1102891/how-to-check-if-a-string-is-numeric-in-java
總結(jié)
以上是生活随笔為你收集整理的Java中怎么样检查一个字符串是不是数字呢的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到吃花生预示着什么
- 下一篇: 去除Java字符串中的空格