java - Java 中关于获取子字符串的 IndexOutOfBoundsException

标签 java string indexoutofboundsexception

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

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 是 block 大小。有人可以帮助我理解这里的索引逻辑错误吗。

最佳答案

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

使用

Math.min(i + 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());
}

关于java - Java 中关于获取子字符串的 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43652484/

相关文章:

java - 从 JList 中删除项目

java.lang.ArrayIndexOutOfBoundsException : 0 (stack implementation) 异常

java - Controller 类中的 Spring MVC 本地化不起作用

java - 随机掷骰和一些数学结果不一致

java - Java中的链表有快速的concat方法吗?

string - 与 Lua 5.1 中的 "[\0-\x7F\xC2-\xF4][\x80-\xBF]*"等效模式

android - ListView 中的随机复选框选择未获取确切位置,显示索引超出范围异常

java - ScheduledExecutorService 的线程池大小

java - 如何复制二维字符串数组?

mysql - 如何将字符串 append 到 MySQL 中的现有字段?