验证字符串是否为数字

时间:2018-03-22 07:20:48

标签: java android

我想使用此方法将字符串解析为十进制

 try {                
       Double.parseDouble(str);
    } catch (Exception exception) {
       exception.printStackTrace();                
    }

如果我在EditText中添加任何字母或者后跟一个字母的数字(到目前为止都很好),它会抛出异常,但是当我输入一个数字后跟字母d或f(例如2.1或2.1f)时,它不会抛出异常。该方法将2.1d string或2.1f string视为2.1float或2.1double,并将double作为2.1d或2.1f返回,程序崩溃。 我还尝试使用:

解析字符串
NumberFormat.getInstance().parse(str);

Double.valueOf(str);

 Double doubleObject = new Double(str);
 double number = doubleObject.doubleValue();

StringUtils.isNumeric(str);

结果是一样的。

最后我使用if(str.contains(d)||str.contains(f))throw new Exception(...)

完成了它

是否有其他方法或其他方法可以在不使用if的情况下执行此操作。

2 个答案:

答案 0 :(得分:0)

如果我是你,我会这样做。

Double numberVar = Double.parseDouble(yourEditText.getText().toString());

if(new Double(numberVar) istanceof Double){
    return true;
}

非常干净,因为字符串包含0或1或任何其他数字并不意味着它不包含a或I。

答案 1 :(得分:-2)

您应该使用Long来解析数字。因为Double是浮点数并且它不会抛出浮点值的异常,并且 d 表示Double中的值,所以它仍然不会抛出异常。你应该使用Long。

喜欢这个

Long.parseLong(str);

但是仍然会接受 l 。所以你可以在解析之前添加一个if条件

if(!str.contains("l"))
{
    Long.parseLong(str);
}
else
{
    // it is not a number.
}

另一个解决方案是将 inputType 放在EditText

android:inputType="numberDecimal"

希望它对你有用。