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));
}
}
1461 次
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 に答える