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

新手上路,请多包涵

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

原文由 Craig Angus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 628
2 个回答

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

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

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

原文由 palacsint 发布,翻译遵循 CC BY-SA 4.0 许可协议

这通常是通过一个简单的用户定义函数(即 Roll-your-own“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) {
  ParsePosition pos = new ParsePosition(0);
  NumberFormat.getInstance().parse(str, pos);
  return str.length() == pos.getIndex();
}

原文由 CraigTP 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题