一尘不染

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

java

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

java 字符串 数字


阅读 484

收藏
2020-02-25

共2个答案

一尘不染

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

使用Apache Commons Lang 3.4及以下版本:NumberUtils.isNumberStringUtils.isNumeric

你还可以使用StringUtils.isNumericSpacewhich返回true空字符串,并忽略字符串中的内部空格。另一种方法是使用NumberUtils.isParsable根据Java基本检查数字是否可解析的方法。(链接的javadocs包含每种方法的详细示例。)

2020-02-25
一尘不染

通常,这是通过简单的用户定义函数(即,自带的“ isNumeric”函数)完成的。

就像是:

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]匹配,实际上并没有国际上的数字意识。(感谢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();
}
2020-02-25