如何确定EditText中的输入是否为整数?

嗨,我是Android编程的新手。

我正在尝试构建一个包含edittext字段和button 。 当用户输入整数时,该按钮将引导他们进入下一个活动。 但是,如果有办法检查用户输入的types,我不会这样做。

有人可以帮帮我吗? 非常感谢你!

 String text = editText123.getText().toString(); try { int num = Integer.parseInt(text); Log.i("",num+" is a number"); } catch (NumberFormatException e) { Log.i("",text+" is not a number"); } 

从API级别1开始,Android提供了一个辅助方法来实现这一点(不需要使用正则expression式或捕获exception): TextUtils.isDigitsOnly(CharSequence str)

 boolean digitsOnly = TextUtils.isDigitsOnly(editText.getText()); 

请注意,此方法返回true ,返回空字符串: 问题24965

如果你想要EditText只接受数字你不能指定android:inputType="number"在布局文件中。

您可以使用TextWatcher for EditText来获取EditText中每个更改的值。您需要在Activity中添加TextWatcher的接口。

  mEditText.addTextChangedListener(Your Class Name.this); 

在TextWatcher的方法中

  @Override public void afterTextChanged(Editable s) { Log.v("Log_tag", "After TextChanged" + s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { Log.i("Log_tag", "Before TextChanged" + s.toString()); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { Log.e("Log_tag", "ontext Changed" + s.toString()); //you can match here s with number or integer if(isNumeric( s.toString())){ //it is number } } public static boolean isNumeric(String str) { return str.matches("-?\\d+(.\\d+)?"); } 

尝试此解决方案。

你需要在你的edittexts中添加属性android:nextFocusDown="@+id/nextedittext_id" android:singleLine="true" android:nextFocusDown="@+id/nextedittext_id"android:singleLine="true"

例如:

   

并在您的活动中添加以下代码:

  editText1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String value=s.toString(); if(isNumeric(value)){ if(Integer.parseInt(value)>=100){ editText1.setFocusableInTouchMode(true); editText1.setFocusable(false); } } } @Override public void afterTextChanged(Editable s) { } }); editText2.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { editText1.setFocusableInTouchMode(true); editText1.setFocusable(true); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { } }); 

isNumeric方法与上面相同:

  public static boolean isNumeric(String str) { return str.matches("-?\\d+(.\\d+)?"); } 

我find了一个更清洁的解决方案,它检查字符串是否是任何types的数字,包括integerfloatlong integerdouble float数。

 import java.math.BigDecimal; Boolean isNumber; try { BigDecimal n = new BigDecimal(theStingToCheck); isNumber = true; } catch (Exception e) { isNumber = false; } 

以下代码可用于确定数字,

 boolean isDigits = TextUtils.isDigitsOnly(edtDigits.getText().toString()); 

但是,由于此方法返回true并且空字符串也是如此,因此您可以对空字符串进行validation,如下所示,

 public boolean isDigits(String number){ if(!TextUtils.isEmpty(number)){ return TextUtils.isDigitsOnly(number); }else{ return false; } }