0

我对这个子字符串函数感到沮丧。在这里,我的子字符串函数只在第一次给我价值。它已存储在 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

4 回答 4

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));
        }
   }
于 2013-02-05T07:03:04.057 回答
0

你忘了endIndex在 substring 方法中给出。这就是为什么你得到 outofboundsexception 的原因。将您的代码更改为这样...

这里的问题是在循环中获取子字符串,第一次调用

 mStr.substring(0,3)) which gives the string as jkl

下次通话

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

要了解有关子字符串的更多信息,请从此处阅读文档

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));

       }
  }
于 2013-02-05T07:03:21.427 回答
0

您可能正在假设mStr并且mystr是相同的。你的意思是mStr在两个地方都使用吗?(在 else 块和 if 块中)

编辑(现在已经修复):

您应该使用mStr.substring(i,i+3)而不是mStr.substring(i,3). 子字符串需要一个起始索引和结束索引,但您假设它需要一个起始索引和长度。

于 2013-02-05T06:53:42.180 回答
0

您必须在 mLst.add(String.valueOf(mStr.substring(i,3)));

因为当 i = 6 时,您将从 substring(6,3) 中得到什么。所以第二个参数应该是可变的

于 2013-02-05T07:10:01.763 回答