Вот функция утилиты, основанная на регулярном выражении, работающая нормально (не может соответствовать проверке "" в регулярном выражении, сохраняя ее читабельной):
public class TestRegexp {
static final String NUM_REGEX=
"-?((([0-9]{1,3})(,[0-9]{3})*)|[0-9]*)(\\.[0-9]+)?([Ee][0-9]*)?";
public static boolean isNum(String s) {
return s!=null && s.length()>0 && s.matches(NUM_REGEX);
}
public static void main(String[]args) {
String[] values={
"",
"0",
"0.1",
".1",
"-.5E5",
"-12,524.5E5",
"-452,456,456,466.5E5",
"-452,456,456,466E5",
"22,22,2.14123415e1",
};
for (String value : values) {
System.out.println(value+" is a number: "
+isNum(value));
}
}
}