本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
如何在Java中检查字符串是否为数字
在解析字符串之前,如何检查字符串是否为数字?
高分回答:
使用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
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️