确保Integer.parseInt(String)是java中的有效int

时间:2017-06-14 14:34:09

标签: java android

我正在尝试获取有关用户的一些基本信息,例如身高,体重等。

我正在使用EditText对象和getText()从用户输入的内容中检索文本。然后我将其转换为字符串,最后使用Integer.parseint(String)将所有内容转换为int。下面是我试图做的一个例子,如果那令人困惑。

if((height.getText().length() > 0) && (???)) {
    mHeight = Integer.parseInt(height.getText().toString());
} else {
    Toast.makeText(getBaseContext(), "Please enter your height, in inches, rounded to the nearest inch", Toast.LENGTH_SHORT).show();
    canContinue = -1;
}

我使用height.getText().length() > 0来确保用户至少将某些内容放入字段中,但如果用户放置字符,则程序崩溃。

(???)是我试图在这里完成的断言,当结果不是有效的int时会返回false。另请注意,我将mHeight初始化为原始int int mHeight

注意:height是EditText对象,我将其初始化为:height = (EditText) findViewById(R.id.height);

5 个答案:

答案 0 :(得分:2)

如果不进行一些复杂的验证,我只会尝试解析并捕获任何异常。

//test that the value is not empty and only contains numbers
//to deal with most common errors
if(!height.getText().isEmpty() && height.getText().matches("\\d+")) {
  try {
    mHeight = Integer.parseInt(height.getText());
  } catch (NumberFormatException e) { //will be thrown if number is too large
    //error handling
  }
}

答案 1 :(得分:1)

使用height.getText().matches("\\d+")检查这是否只是一个数字

像:

if((height.getText().length() > 0) && height.getText().toString().matches("\\d+")) {

}

答案 2 :(得分:1)

编写以下方法并将其调用而不是" ???"

    public static boolean isNumeric(String str)  
    {  
      try  
      {  
        int d = Integer.parseInt(str);  
      }  
      catch(NumberFormatException nfe)  
      {  
        return false;  
      }  
      return true;  
    }

答案 3 :(得分:1)

尝试解析它可以捕获任何异常: -

try {
    int mHeight = 0;
    if (height.getText().length() > 0) {
        mHeight = Integer.parseInt(height.getText().toString());
    }
} catch (NumberFormatException ex) {
    Toast.makeText(getBaseContext(), "Please enter your height, in inches, rounded to the nearest inch", Toast.LENGTH_SHORT).show();
    canContinue = -1;
}   

答案 4 :(得分:0)

如果您只是想获取数字,请将inputType属性添加到EditText

                android:inputType="numberDecimal"

然后用户只能在EditText中输入数字,因此在解析时不会出错。