-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ため、明らかにそのうちの 1 つが範囲外です。どれ、お任せします(宿題なので)。

(または、SOの他の素晴らしい人々に言うべきでしたか?:)

于 2012-06-30T19:29:34.257 に答える
2

最後の要素はs.length、存在しない であり、 をスローしArrayOutOfBoundsExceptionます。

次のアプローチを使用できます。

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

これは少し理解しやすいです (反復sし、反復ごとに、反復される要素にs経由でアクセスできますi)。

于 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

for you を使用しているため、配列が不足していますi<=s.lengthが、配列の最大インデックスはs.length-1

しかし、私はこれに興味があります

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

空の配列を作成してから新しい配列に置き換えるのはなぜですか? もっとこういうのを作りたかったんだと思う

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

以前は、ユーザー入力の 2 行目に基づいて配列を作成していました。これは、2 回呼び出しを行ったためですscn.nextLine()

于 2012-06-30T19:38:45.860 に答える