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;}添加回答
舉報
