如何在Java中检查字符串是否为数字 ?| Java Debug 笔记

578 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

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

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

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

使用Apache Commons Lang 3.5及更高版本:NumberUtils.isCreatable或StringUtils.isNumeric。

使用Apache Commons Lang 3.4及以下版本:NumberUtils.isNumber或StringUtils.isNumeric。

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

高分回答:

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

文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/1…

作者建议:我也比较喜欢使用StringUtils.isNumeric

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️