为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

如何在Java中检查字符串是否为数字在解析字符串之前,如何检查字符串是否为数字?
查看完整描述

4 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

带着阿帕奇公域朗3.5及以上:NumberUtils.isCreatableStringUtils.isNumeric.

带着阿帕奇公域朗3.4及以下:NumberUtils.isNumberStringUtils.isNumeric.

您也可以使用StringUtils.isNumericSpace返回true对于空字符串,并忽略字符串中的内部空格。另一种方法是使用StringUtils.isParsable根据Java,它基本上检查数字是可解析的。


查看完整回答
反对 回复 2019-05-30
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

这通常是用一个简单的用户定义的函数(即滚动你自己的“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();}


查看完整回答
反对 回复 2019-05-30
?
九州编程

TA贡献1785条经验 获得超4个赞

如果您使用的是Android,那么您应该使用:

android.text.TextUtils.isDigitsOnly(CharSequence str)

保持简单。大多数情况下,每个人都可以“重新编程”(同样的事情)。


查看完整回答
反对 回复 2019-05-30
?
HUX布斯

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;}


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 1637 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信