我正在尝试制作一个应用,您可以通过editText组件获得输入,并将其放入如下所示的字符串中:
number = findViewById(R.id.editText2);
newNumber = number.getText().toString();
现在我想要的是在满足以下条件的情况下替换字符串start:
if (number.getText().toString().substring(0, 1).equals("0")) {
newNumber = newNumber.replaceFirst("06", "3876");
Log.d("TAG", newNumber);
}
我收到一条错误消息,说StringIndexIsOutOfBounds index = 2 length = 0
我也这样尝试过:
if (newNumber.startsWith("06")) {
newNumber = newNumber.replaceFirst("06", "3876");
Log.d("TAG", newNumber);
//Toast.makeText(MainActivity.this, newNumber, Toast.LENGTH_SHORT).show();
}
else {
...
}
运行此查询时,我得到else语句。
由于我尝试了多种组合,因此类似的组合会产生空的吐司。 (不记得它到底是做什么的,但它也不重要,因为它也不对)
我的代码有什么问题?字符串是所有数字,但是我发现对字符串进行替换最简单,如果您知道更好的实现,请成为我的客人。输入应该是9个数字,输出应该是11个数字(我将3876替换为06,所以在那里得到了2个额外的数字)。
(我在SO中搜索了类似的问题,有些尝试是娱乐性的,但没有成功)
答案 0 :(得分:1)
如果您获得StringIndexIsOutOfBounds index=2 length=0
,则表示您的TextView
没有用户预定义或提供的任何值。
为避免此错误,您应该验证String
是否不为空:
if (!number.getText().toString().isEmpty()
&& number.getText().toString().substring(0, 1).equals("0")) {
// your code goes here...
}
请记住,只要TextView
为空,就不会满足此条件。
答案 1 :(得分:1)
好吧,首先,您确定您具有正确的字符串f.ex。您的var中的06xxxxxx并且不为空?
检查您的字符串
!number.getText()。toString()。isEmpty()
比尝试以下方法:
EditText number = (EditText) findViewById(R.id.editText2);
String newNumber = number.getText().toString();
f(!number.getText().toString().isEmpty()){
Log.d("TAG", newNumber);
newNumber = newNumber.replaceFirst("06", "3876");
Log.d("TAG", newNumber);
}