我有以下表格中的EditText
:
<EditText
android:id="@+id/editTextNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:layout_margin="10dp"
android:ems="10"
android:inputType="numberDecimal" />
稍后我使用输入创建BigDecimal-Calculations
,并意识到可以在EditText
中输入任何内容甚至是简单的点。所以我写了以下内容:
EditText editTextNumber = (EditText) rootView.findViewById(R.id.editTextNumber);
String number = String.valueOf(editTextNumber.getText());
if (number.equals("") || number.equals(".")) {
number = "1";
editTextNumber.setText(number);
}
因为我之前已经监督了这两个可能的例外,我想知道我是否已经在这个代码中监督了另一个错误的可能性,并且如果有一个&#34;更清洁的&#34;方式。
答案 0 :(得分:2)
我使用这个功能。这并不考虑可能使用','而不是'。'的国际键盘。
public static boolean isNumeric(@Nullable String s)
{
if (TextUtils.isEmpty(s)) return false;
return s.matches("[-+]?\\d*\\.?\\d+");
}
答案 1 :(得分:1)
如果您不处理任何花车,TextUtils.isDigitsOnly()
(javadoc)可能会有所帮助。
答案 2 :(得分:1)
从editText处理数据或从任何其他来源填充的任何其他字符串是至关重要的,因为您可能永远不知道究竟是什么输入字符串
您可以编写以下代码或根据您的要求进行自定义
private boolean isValidString(String text){
if (text == null) {
return false;
}
if (text.trim().contentEquals("")) {
return false;
}
if (text.trim().length() < 1) {
return false;
}
if (text.trim().toLowerCase().contentEquals("null")) {
return false;
}
// you won't require following check for normal String , but as you would be dealing
// with numbers you may want to check that otherwise, Some surprises are
// waiting for you, while doing some math with the numbers
if (!text.matches("[0-9]+(\\.[0-9][0-9]?)?")) {
System.out.println("invalid: "+ text);
return false;
}else{
System.out.println("Valid: "+ text);
}
//
return true;
}
现在假设这是您拥有的编辑文本
EditText editTextNumber = (EditText) rootView.findViewById(R.id.editTextNumber);
if(isValidString(editTextNumber.getText().toString)){
your String validation is done so you can perform your relevant action here
}