获取子字符串时Java中的IndexOutOfBoundsException

时间:2017-04-27 08:26:37

标签: 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) {
        List<String> chunk = ids.subList(i, i + max);
        chunks.add(chunk);
    }
    return chunks;
}

当我调用方法时 获取subList时会得到IndexOutOfBoundsException。其中max是一个块大小。有人可以帮我理解索引逻辑错误。

2 个答案:

答案 0 :(得分:2)

如果您使用i + max作为subList的第二个参数,如果ids.size()不能被max整除,则该索引将大于{{ 1}}。

使用

ids.size()

而不是Math.min(i + max, ids.size())

或者,每次避免计算i + max

min

答案 1 :(得分:1)

List<String> chunk = ids.subList(i, i + max);

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