Java:如何修复ArrayIndexOutOfBoundsException?

时间:2012-06-30 19:26:06

标签: java

public class TextFileExtractor{
    public static String[] fileExtractor(String[] s){

        StringBuilder sb=new StringBuilder();

            for(int i=0;i<=s.length;i++){
                if(s[i].endsWith(".txt")){
                    sb.append(s[i]);
                    sb.append(',');
                }
            }
        String str=sb.toString();
        String[] sa=str.split(",");

        return sa;
    }
}

import java.util.*;

class P8Test{

    public static void main(String[] args) 
    {   Scanner scn=new Scanner(System.in);
        System.out.print("Enter String Array:");
        String[] data=new String[(scn.nextLine()).length()];
        data=(scn.nextLine()).split(",");

            System.out.print("all Files");
                System.out.print(Arrays.toString(data));
                    System.out.print("Text Files");

        String[] res=TextFileExtractor.fileExtractor(data);
        System.out.print(Arrays.toString(res));
    }
}

4 个答案:

答案 0 :(得分:9)

使用这种循环声明

for(int i=0;i<=s.length;i++)

您将尝试访问总共s.length+1个数组元素,因此显然其中一个元素超出范围。哪一个,我留给你(因为它是家庭作业)。

(或者我应该对SO上的其他优秀人士说过了吗?)

答案 1 :(得分:2)

最后一个元素是s.length,它不存在,抛出ArrayOutOfBoundsException

您可以使用以下方法:

    for (String i : s) {
        if (i.endsWith(".txt") {
             ...
        }
    }

这更容易理解(迭代s并且对于每次迭代,可以通过s访问被迭代的i的元素。

答案 2 :(得分:2)

问题在于:for(int i=0;i<=s.length;i++) 在java中,数组 0索引,因此数组从0开始,到Length-1结束。

答案 3 :(得分:2)

您不在数组中,因为您使用i<=s.length但数组的最大索引为s.length-1

但我对此感兴趣

String[] data = new String[(scn.nextLine()).length()];
data = (scn.nextLine()).split(",");

为什么要创建空数组然后用新数组替换它? 我想你想创造更像这样的东西

String[] data = scn.nextLine().split(",");

之前您可以根据第二行用户输入创建数组,因为您可以两次调用scn.nextLine()