Ref: http://stackoverflow.com/questions/1102891/how-to-check-a-string-is-a-numeric-type-in-java
方法1:
先把 string 转换成 char 数组,然后判断每个 char 是否是 数字。
public boolean isNumeric(String str) { char[] cs = str.toCharArray(); if ( !str) return false; for (Char a : cs) { if ( !Character.isDigit(a) ) return false; } return true; }
或者可以直接判断 string 的每个字符是否是数字 Character.isDigit( str.charAt(i) )
方法2:
方法1不能判断 数字是否为浮点数。方法2是通常用到的方法。
public static boolean isNumeric(String str) { try { double d = Double.parseDouble(str); } catch(NumberFormatException nfe) { return false; } return true; }
这个方法的问题在于:如果你调用这个方法很多次,而且你预计很多次的返回结果是 false ,那么这个函数的效率就成问题了,因为你依赖于 Excepions 来抛出每次错误,这种操作是很昂贵的。
一个替代的策略是使用 regular expression 来验证是否是一个 number.
public static boolean isNumeric(String str) { return str.matches("-?\\d+(\\.\\d+)?"); // match a number with optional '-' and decimal. }
另一个替代的策略是使用自带的 java.text.NumberFormat 对象来检测。
public static boolean isNumeric(String str) { NumberFormat formatter = NumberFormat.getInstance(); ParsePosition pos = new ParsePosition(0); formatter.parse(str, pos); return str.length() == pos.getIndex(); }