如何在Java中检查字符串是否为数字

如何在Java中检查字符串是否为数字

在解析字符串之前,如何检查字符串是否为数字?



慕容708150
浏览 1647回答 4
4回答

繁星coding

带着阿帕奇公域朗3.5及以上:NumberUtils.isCreatable或StringUtils.isNumeric.带着阿帕奇公域朗3.4及以下:NumberUtils.isNumber或StringUtils.isNumeric.您也可以使用StringUtils.isNumericSpace返回true对于空字符串,并忽略字符串中的内部空格。另一种方法是使用StringUtils.isParsable根据Java,它基本上检查数字是可解析的。

繁花不似锦

这通常是用一个简单的用户定义的函数(即滚动你自己的“isNDigic”函数)来完成的。类似于: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.}不过,请注意上面的RegEx机制,因为如果您使用的是非阿拉伯数字(即从0到9以外的数字),它将失败。这是因为RegEx的“\d”部分将只与[0-9]相匹配,而且实际上并不是国际上所知的。(感谢俄勒冈幽灵指出这一点!)甚至另一种选择是使用Java的内置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();}

九州编程

如果您使用的是Android,那么您应该使用:android.text.TextUtils.isDigitsOnly(CharSequence str)保持简单。大多数情况下,每个人都可以“重新编程”(同样的事情)。

HUX布斯

对于使用异常测试字符串是否为数字,我也有类似的性能考虑。因此,我最终拆分字符串并使用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;}
打开App,查看更多内容
随时随地看视频慕课网APP