4 回答

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

TA貢獻1851條經驗 獲得超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貢獻1785條經驗 獲得超4個贊
如果您使用的是Android,那么您應該使用:
android.text.TextUtils.isDigitsOnly(CharSequence?str)
保持簡單。大多數情況下,每個人都可以“重新編程”(同樣的事情)。

TA貢獻1876條經驗 獲得超6個贊
對于使用異常測試字符串是否為數字,我也有類似的性能考慮。因此,我最終拆分字符串并使用java.lang.Character.isDigit()
.
public?static?boolean?isNumeric(String?str){ ????for?(char?c?:?str.toCharArray()) ????{ ????????if?(!Character.isDigit(c))?return?false; ????} ????return?true;}
根據Javadoc,?Character.isDigit(char)
將正確識別非拉丁數字。就性能而言,我認為簡單的N個比較(其中N是字符串中的字符數)比執行正則匹配更具有計算效率。
更新:正如Jean-Fran ois Corbett在評論中指出的,上述代碼只驗證正整數,這涵蓋了我的大部分用例。下面是根據系統中使用的默認區域設置正確驗證小數的更新代碼,假設小數分隔符只在字符串中出現一次。
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;}
添加回答
舉報