4 回答
TA贡献1797条经验 获得超4个赞
带着阿帕奇公域朗3.5及以上:NumberUtils.isCreatable或StringUtils.isNumeric.
带着阿帕奇公域朗3.4及以下:NumberUtils.isNumber或StringUtils.isNumeric.
您也可以使用StringUtils.isNumericSpace返回true对于空字符串,并忽略字符串中的内部空格。另一种方法是使用StringUtils.isParsable根据Java,它基本上检查数字是可解析的。
TA贡献1851条经验 获得超4个赞
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.}public static boolean isNumeric(String str) {
NumberFormat formatter = NumberFormat.getInstance();
ParsePosition pos = new ParsePosition(0);
formatter.parse(str, pos);
return str.length() == pos.getIndex();}TA贡献1785条经验 获得超4个赞
如果您使用的是Android,那么您应该使用:
android.text.TextUtils.isDigitsOnly(CharSequence str)
保持简单。大多数情况下,每个人都可以“重新编程”(同样的事情)。
TA贡献1876条经验 获得超6个赞
对于使用异常测试字符串是否为数字,我也有类似的性能考虑。因此,我最终拆分字符串并使用java.lang.Character.isDigit().
public static boolean isNumeric(String str){
for (char c : str.toCharArray())
{
if (!Character.isDigit(c)) return false;
}
return true;}根据Javadoc, Character.isDigit(char)将正确识别非拉丁数字。就性能而言,我认为简单的N个比较(其中N是字符串中的字符数)比执行正则匹配更具有计算效率。
更新:正如Jean-Fran ois Corbett在评论中指出的,上述代码只验证正整数,这涵盖了我的大部分用例。下面是根据系统中使用的默认区域设置正确验证小数的更新代码,假设小数分隔符只在字符串中出现一次。
public static boolean isStringNumeric( String str ){
DecimalFormatSymbols currentLocaleSymbols = DecimalFormatSymbols.getInstance();
char localeMinusSign = currentLocaleSymbols.getMinusSign();
if ( !Character.isDigit( str.charAt( 0 ) ) && str.charAt( 0 ) != localeMinusSign ) return false;
boolean isDecimalSeparatorFound = false;
char localeDecimalSeparator = currentLocaleSymbols.getDecimalSeparator();
for ( char c : str.substring( 1 ).toCharArray() )
{
if ( !Character.isDigit( c ) )
{
if ( c == localeDecimalSeparator && !isDecimalSeparatorFound )
{
isDecimalSeparatorFound = true;
continue;
}
return false;
}
}
return true;}添加回答
举报
