具有子串函数Android的StringIndexOutOfBoundException

时间:2013-02-05 06:47:32

标签: android substring

我对这个子串函数感到沮丧。这里我的子串函数只给我第一次的价值。它已存储在arraylist中的前3个字符。第二次它无法接受其他3个字符并且它已被存储在“arralist中”。

我的代码如下:

 String mStr= "jklpourtujolkjth";

     ArrayList<String> mLst = new ArrayList<String>();

       for (int i = 0; i < mStr.length(); i+=3)

        {
            if ((i + 3) < mStr.length())
            {
                mLst.add(mStr.substring(i,3));
            }
            else{
                mLst.add(mStr.substring(i));

            }
        }

帮我解释一下这段代码。我怎么了?

谢谢,

4 个答案:

答案 0 :(得分:0)

您可能认为mStrmystr是相同的。你的意思是在两个地方使用mStr吗? (在else块和if块中)

编辑(现在已修复):

您应该使用mStr.substring(i,i+3)代替mStr.substring(i,3)。 Substring采用起始索引和结束索引,但您假设它采用起始索引和长度。

答案 1 :(得分:0)

String mStr= "jklpourtujolkjth";

 ArrayList<String> mLst = new ArrayList<String>();
   for (int i = 0; i < mStr.length(); i+=3)
   {
        int to=i+3;
        if (to < mStr.length())
        {
            mLst.add(String.valueOf(mStr.substring(i,to)));
        }
        else
        {
            mLst.add(mStr.substring(i));
        }
   }

答案 2 :(得分:0)

您忘记在子字符串方法中提供endIndex。这就是为什么你得到outofboundsexception。将您的代码更改为这样......

这里的问题是在第一次调用

时获取循环中的子字符串
 mStr.substring(0,3)) which gives the string as jkl

下次通话

 mStr.substring(3,3)) which will give outofboundsexception

要了解有关子字符串的更多信息,请阅读here

中的文档
String mStr= "jklpourtujolkjth";

ArrayList<String> mLst = new ArrayList<String>();
  for (int i = 0; i < mStr.length(); i+=3)
  {
       if ((i + 3) < mStr.length())
       {
           mLst.add(String.valueOf(mStr.substring(i,i+3)));// here is the change

       }
       else{
           mLst.add(mStr.substring(i));

       }
  }

答案 3 :(得分:0)

你必须得到例外 mLst.add(将String.valueOf(mStr.substring(I,3)));

因为当i = 6时,你将从子串(6,3)得到什么。 所以第二个参数应该是变量