問題:Java中怎么樣檢查一個字符串是不是數字呢
在解析之前,怎么樣檢查一個字符串是不是數字呢
回答一
這些通常是由一個簡單的用戶自定義函數去解決的(即,自帶的 “isNumeric” 函數)
例如
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.
}
對于正則表達式的機制可千萬要小心,因為它會失敗的,如果你用的不是阿拉伯字母(即數字0到9).這是因為“/d”那部分正則表達式只匹配0-9的,并且它也不能有效地識別到國際上數字
或者另一個可供替代的選擇就是用java.text.NumberFormat 這個對象了,我們可以檢查 parser position的位置是否在字符串的末尾。如果是的話,我們就可以認為整個字符串都是一個數字了
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并且忽略字符串內部的空格。另一個方法就是使用Java中經常用來檢查是否可被解析為數字的NumberUtils.isParsable(鏈接中的Java文檔包含每種方法的詳細實例)
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/1102891/how-to-check-if-a-string-is-numeric-in-java