我有两个问题:
x.substring(i,1)
在try/catch
中断
因为这个以及其他可能的事情,我无法使用这种方法。我试图这样做,当用户输入小数时,它会增加max length
的{{1}},但如果将EditText
减少回原来的max length
,用户输入的数字太大。
max length
我该怎么做才能解决这个boolean tooBig = false;
EditText txt = (EditText)findViewById(R.id.num1);
TextView display = (TextView)findViewById(R.id.display);
String x = txt.getText().toString(); // the String in the EditText
String str = "didn't work";
try
{
if (x.contains("."))
{
// set the max length to be 15
if (x.length() >= 10)
{
// see if the decimal is contained after 10 digits
for (int i = 10; i < x.length(); i++)
{
str = x.subtring(i,1); // breaks here (test)
if (x.substring(i,1).equals(".")) // also breaks here
{
tooBig = true;
}
}
}
if (tooBig)
{
// set text to be blank and max length to be 8
}
}
}
catch (Exception e)
{
txt.setText(str); // "didn't work"
}
问题?
答案 0 :(得分:2)
问题在于
for (int i = 10; i < x.length(); i++)
{
str = x.subtring(i,1); // breaks here (test)
if (x.substring(i,1).equals(".")) // startIndex say 10 is
greater than 1 which is wrong.
{
你的startIndex总是大于endIndex,这是完全错误的并且会导致java.lang.StringIndexOutOfBoundsException
答案 1 :(得分:2)
if (x.substring(i,1).equals(".")) // also breaks here
{
tooBig = true;
}
必须是:
if (x.substring(i,i+1).equals("."))
{
tooBig = true;
}
答案 2 :(得分:1)
这将是我新更改的代码:
boolean tooBig = false;
EditText txt = (EditText)findViewById(R.id.num1);
String x = txt.getText().toString(); // the String in the EditText
try
{
if (x.contains("."))
{
// set the max length to be 15
if (x.length() >= 10)
{
// see if the decimal is contained after 10 digits
for (int i = 10; i < x.length(); i++)
{
if (x.substring(i,i+1).equals("."))
{
tooBig = true;
}
}
}
if (tooBig)
{
// set text to be blank and max length to be 9
}
}
else // no decimal
{
// set the max length to be 9
}
}
catch (Exception e) {}
答案 3 :(得分:0)
您必须将(i,1)
更改为(i, i+1)
,因为在Java中,第二个数字是您的index end point
,而不是“要使用的字符数”,就像在其他一些语言中一样。您可以从i
开始,以i
以上的1结束。
您可以轻松使用indexOf(".")
来解决您的问题。另外,如果用户删除了小数,请使用else
语句将max length
更改回原始max length
。
将您的try
更改为:
if (x.contains("."))
{
// set the max length to be 15
if (x.indexOf(".") > 9)
{
txt.setText(x.substring(0,9));
// set length to be 9
}
}
else
{
// set max length back to original
}