4 回答

TA貢獻(xiàn)1797條經(jīng)驗 獲得超4個贊
帶著阿帕奇公域朗3.5及以上:NumberUtils.isCreatable
或StringUtils.isNumeric
.
帶著阿帕奇公域朗3.4及以下:NumberUtils.isNumber
或StringUtils.isNumeric
.
您也可以使用StringUtils.isNumericSpace
返回true
對于空字符串,并忽略字符串中的內(nèi)部空格。另一種方法是使用StringUtils.isParsable
根據(jù)Java,它基本上檢查數(shù)字是可解析的。

TA貢獻(xiàn)1851條經(jīng)驗 獲得超4個贊
public static boolean isNumeric(String str) { try { Double.parseDouble(str); return true; } catch(NumberFormatException e){ return false; } }
public static boolean isNumeric(String str) { return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.}
public static boolean isNumeric(String str) { NumberFormat formatter = NumberFormat.getInstance(); ParsePosition pos = new ParsePosition(0); formatter.parse(str, pos); return str.length() == pos.getIndex();}

TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊
如果您使用的是Android,那么您應(yīng)該使用:
android.text.TextUtils.isDigitsOnly(CharSequence?str)
保持簡單。大多數(shù)情況下,每個人都可以“重新編程”(同樣的事情)。

TA貢獻(xiàn)1876條經(jīng)驗 獲得超6個贊
對于使用異常測試字符串是否為數(shù)字,我也有類似的性能考慮。因此,我最終拆分字符串并使用java.lang.Character.isDigit()
.
public?static?boolean?isNumeric(String?str){ ????for?(char?c?:?str.toCharArray()) ????{ ????????if?(!Character.isDigit(c))?return?false; ????} ????return?true;}
根據(jù)Javadoc,?Character.isDigit(char)
將正確識別非拉丁數(shù)字。就性能而言,我認(rèn)為簡單的N個比較(其中N是字符串中的字符數(shù))比執(zhí)行正則匹配更具有計算效率。
更新:正如Jean-Fran ois Corbett在評論中指出的,上述代碼只驗證正整數(shù),這涵蓋了我的大部分用例。下面是根據(jù)系統(tǒng)中使用的默認(rèn)區(qū)域設(shè)置正確驗證小數(shù)的更新代碼,假設(shè)小數(shù)分隔符只在字符串中出現(xiàn)一次。
public?static?boolean?isStringNumeric(?String?str?){ ????DecimalFormatSymbols?currentLocaleSymbols?=?DecimalFormatSymbols.getInstance(); ????char?localeMinusSign?=?currentLocaleSymbols.getMinusSign(); ????if?(?!Character.isDigit(?str.charAt(?0?)?)?&&?str.charAt(?0?)?!=?localeMinusSign?)?return?false; ????boolean?isDecimalSeparatorFound?=?false; ????char?localeDecimalSeparator?=?currentLocaleSymbols.getDecimalSeparator(); ????for?(?char?c?:?str.substring(?1?).toCharArray()?) ????{ ????????if?(?!Character.isDigit(?c?)?) ????????{ ????????????if?(?c?==?localeDecimalSeparator?&&?!isDecimalSeparatorFound?) ????????????{ ????????????????isDecimalSeparatorFound?=?true; ????????????????continue; ????????????} ????????????return?false; ????????} ????} ????return?true;}
添加回答
舉報