这是我的代码,当我尝试这个时,我得到索引超出绑定的异常。请建议
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");
}
}
答案 0 :(得分:4)
您的列表测试在每次迭代时只有一个项目。因此,start + 5
大于test.size()。这会导致JavaDoc所声明的IndexOutOfBoundException:
非法端点索引值fromIndex&lt;的IndexOutOfBoundsException 0 || toIndex&gt;尺寸|| fromIndex&gt; toIndex
答案 1 :(得分:2)
我认为这一行是问题所在:
List<String> group = test.subList(start, start+5);
start+5
将超出最后一项
答案 2 :(得分:2)
您在此行中获得IndexOutOfBoundsException
List<String> group = test.subList(start, start+5);
您正尝试访问仅包含1个元素的List中的第5个元素((start = 0)+ 5)。
我不知道你要做什么,但你需要重新考虑你的代码
答案 3 :(得分:1)
尝试在for循环中修复条件:
for (int start = 0; start + 5 < test.size(); start += 5) {
问题是这一行
List<String> group = test.subList(start, start+5);
超出范围,因为您没有检查start + 5
是否小于列表大小。
答案 4 :(得分:0)
您对subList
的工作原理感到困惑。
subList
会在 LIST 中返回 SUB LIST 。因此,如果您有一个包含10个元素的List<String>
,并且您说从0到4给我一个subList
,它会返回一个包含5个元素的List<String>
。
您要做的是执行某种substring
,为此目的使用subList
是不正确的。你的循环对subList
没用,因为你会立即超出界限(如你所示),因为在第一次迭代中,只有 ONE 元素。砰的一声,你刚刚杀了一只小猫。
即使我在开头添加了五六个元素,你的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
但请确保在您违反添加到String
的{{1}}时,不要超出字符串的长度。
答案 5 :(得分:-1)
在for循环中,每次迭代后将起始变量递增5。 for循环中定义的条件将在每次迭代之前检查索引deos不会超过列表的总大小。但是在for循环中,你再次将start变量递增5并使用这个变量访问列表,这可能超出列表的大小,导致超出范围的异常。
例如。 list的大小是17,你在第二次迭代中,所以你输入for循环,其中start的值为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;
}
}