如何在Java中检查字符串是否为数字
在解析它之前,你会如何检查一个String是否是一个数字?
使用Apache Commons Lang 3.5及更高版本: NumberUtils.isCreatable
或StringUtils.isNumeric
。
使用Apache Commons Lang 3.4及更低版本: NumberUtils.isNumber
或StringUtils.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