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

在解析它之前,你会如何检查一个String是否是一个数字?


使用Apache Commons Lang 3.5及更高版本: NumberUtils.isCreatableStringUtils.isNumeric

使用Apache Commons Lang 3.4及更低版本: NumberUtils.isNumberStringUtils.isNumeric

您还可以使用StringUtils.isNumericSpace ,它为空字符串返回true并忽略字符串中的内部空格。 (链接的javadoc包含每种方法的详细示例。)


这通常是用一个简单的用户定义函数完成的(即Roll-your-own“isNumeric”函数)。

就像是:

public static boolean isNumeric(String str)  
{  
  try  
  {  
    double d = Double.parseDouble(str);  
  }  
  catch(NumberFormatException nfe)  
  {  
    return false;  
  }  
  return true;  
}

但是,如果你调用这个函数的次数很多,并且你期望许多检查失败,因为它不是一个数字,那么这个机制的性能就不会很好,因为你依赖于每次失败抛出的异常,这是一个相当昂贵的操作。

另一种方法可能是使用正则表达式来检查作为数字的有效性:

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],并且实际上没有国际化的数字意识。 (感谢OregonGhost指出这一点!)

或者甚至另一种选择是使用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)

文档可以在这里找到

把事情简单化。 大多数人都可以“重新编程”(同样的事情)。

链接地址: http://www.djcxy.com/p/3549.html

上一篇: How to check if a String is numeric in Java

下一篇: Convert bytes to a string?