Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取子字符串时Java中的IndexOutOfBoundsException_Java_String_Indexoutofboundsexception - Fatal编程技术网

获取子字符串时Java中的IndexOutOfBoundsException

获取子字符串时Java中的IndexOutOfBoundsException,java,string,indexoutofboundsexception,Java,String,Indexoutofboundsexception,我必须将字符串列表分块,因此我编写了这个方法 public static List<List<String>> chunkIds(List<String> ids, int max) { List<List<String>> chunks = new ArrayList<>(); for (int i = 0; i < ids.size(); i = i + max) {

我必须将字符串列表分块,因此我编写了这个方法

public static List<List<String>> chunkIds(List<String> ids,
        int max) {
    List<List<String>> chunks = new ArrayList<>();
    for (int i = 0; i < ids.size(); i = i + max) {
        List<String> chunk = ids.subList(i, i + max);
        chunks.add(chunk);
    }
    return chunks;
}
公共静态列表chunkID(列表ID,
整数(最大值){
列表块=新的ArrayList();
对于(int i=0;i
当我调用该方法时
我在获取子列表时收到IndexOutOfBoundsException。其中max是一个块大小。请有人帮助我理解这里的索引逻辑错误。

如果使用
I+max
作为
subList
的第二个参数,如果
ids.size()
不能完全被
max
整除,该索引将大于
ids.size()

使用

而不是
i+max

或者,避免每次计算
min

int i;
for (i = 0; i + max < ids.size(); i += max) {
  chunks.add(ids.subList(i, i + max));
}
if (i < ids.size()) {
  chunks.add(ids.subList(i, ids.size());
}
inti;
对于(i=0;i+max
List chunk=id.subList(i,i+max);

什么是
max
i+max
不应大于
ids.size()

好吧,假设您在
ids
列表中有6个项目,并且
max
是3。然后当您到达
i=4
时,您尝试获取项目4到7。但是列表中只有项目0到5。@realpoint是的,我现在知道了,当i+max大于ids size时,toIndex应该设置为ids size。thanks@RealSkeptic我可以永远不要为4,因为在您的示例中它始终是3的倍数。但是如果他有7或8项,当i=6时,他将得到异常。->@Hmahwish是否尝试使用调试器?@DanielAlder我理解我在这里的逻辑错误。感谢我现在得到了逻辑错误,如果小于max,则将to index size设置为ids.size。Thanks@Daniel阿尔德谢谢
int i;
for (i = 0; i + max < ids.size(); i += max) {
  chunks.add(ids.subList(i, i + max));
}
if (i < ids.size()) {
  chunks.add(ids.subList(i, ids.size());
}
List<String> chunk = ids.subList(i, i + max);