检查10位数后的小数 - substring(i,1)不起作用

时间:2013-08-10 20:24:08

标签: java android substring

我有两个问题:

    {li> x.substring(i,1)try/catch 中断
  1. 因为这个以及其他可能的事情,我无法使用这种方法。我试图这样做,当用户输入小数时,它会增加max length的{​​{1}},但如果将EditText减少回原来的max length,用户输入的数字太大。

    max length
  2. 我该怎么做才能解决这个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" } 问题?

4 个答案:

答案 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
}