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));
}
}
答案 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()
。