-4
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

4 回答 4

9

有了这种循环声明

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

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

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

于 2012-06-30T19:29:34.257 回答
2

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

您可以使用以下方法:

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

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

于 2012-06-30T19:34:26.487 回答
2

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

于 2012-06-30T19:38:41.150 回答
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()了两次。

于 2012-06-30T19:38:45.860 回答