有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何解决这个索引越界问题

这是我的代码,当我尝试这一点时,我得到了索引越界异常。请建议

while (rs.next()) {
    String url = rs.getString("rssUrl");
    List<String> test = new ArrayList<String>();
    test.add(url);
    //List<List<String>> output = new ArrayList<List<String>>();
    for (int start = 0; start < test.size(); start += 5) {
        List<String> group = test.subList(start, start+5);
        System.out.println(group);
        //System.out.println(output);
        System.out.println("split");
    }
}

共 (6) 个答案

  1. # 1 楼答案

    尝试在for循环中修复您的情况:

    for (int start = 0; start + 5 < test.size(); start += 5) {
    

    问题是这条线

    List<String> group = test.subList(start, start+5);
    

    超出范围,因为您没有检查start + 5是否小于列表大小

  2. # 2 楼答案

    列表测试在每次迭代中只有一项。因此,start + 5比test大。大小()。这会导致IndexOutOfBoundException,如JavaDoc所述:

    IndexOutOfBoundsException for an illegal endpoint index value fromIndex < 0 || toIndex > size || fromIndex > toIndex

  3. # 3 楼答案

    我认为这是问题所在:

    List<String> group = test.subList(start, start+5);
    

    start+5将超出最后一项的列表范围

  4. # 4 楼答案

    你在这一行中获得了IndexOutOfBoundsException

    List<String> group = test.subList(start, start+5);
    

    您正试图访问只有1个元素的列表中的第5个元素((start=0)+5)

    我不知道你想做什么,但你需要重新考虑你的代码

  5. # 5 楼答案

    在for循环中,在每次迭代后,将start变量递增5。for循环中定义的条件将在每次迭代之前检查索引deo是否超出列表的总大小。但是在for循环中,您再次将start变量增加5,并使用该变量访问列表,这可能超出列表的大小,从而导致越界异常

    例如,列表的大小是17,您正在进行第二次迭代,所以您进入for循环,开始时的值是15。但在for循环中,再次将变量增加5,使其变为20。如果尝试访问列表的第20个元素,它肯定会抛出一个越界异常

    编辑:

    for (int start = 0; start < test.size(); start += 5) {
        if((start+5)<=index.size()){
           List<String> group = test.subList(start, start+5);
           System.out.println(group);
           //System.out.println(output);
           System.out.println("split");
        }else{
           break;
        }        
    }
    
  6. # 6 楼答案

    你对subList的工作原理感到困惑

    subList将从列表中返回子列表。所以如果你有一个包含10个元素的List<String>,你说给我一个从0到4的subList,它会返回一个包含5个元素的List<String>

    您试图做的是执行某种substring,这是不正确的。你的循环对于subList来说是无用的,因为在第一次迭代中,只有一个元素,所以你马上就会越界(正如你已经展示的那样)。你刚杀了一只小猫

    即使我在开头加上五到六个元素,你的for循环在这个方面仍然是错误的。比如说,

           String url = "http://www.google.com";
           List<String> test = new ArrayList<String>();
           test.add(url);
           test.add(url);
           test.add(url);
           test.add(url);
           test.add(url);
           test.add(url);
    
           for (int start = 0; start < test.size(); start += 5) 
           {
              System.out.println("start = " + start);
              List<String> group = test.subList(start, start+5);
              System.out.println(group);          
           }
    

    输出:

    start = 0
    [http://www.google.com, http://www.google.com, http://www.google.com, http://www.google.com, http://www.google.com]
    Exception in thread "main" java.lang.IndexOutOfBoundsException: toIndex = 10
    start = 5
        at java.util.ArrayList.subListRangeCheck(ArrayList.java:922)
        at java.util.ArrayList.subList(ArrayList.java:914)
        at javaapplication2.Main.main(Main.java:20)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)
    

    所以你可以看到你的subList是如何失败的,你的逻辑是错误的

    实现一个subString,但确保在断开添加到List<String>中的String时,不要超出字符串的长度