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
数组元素,因此显然其中一个元素超出了范围。哪一个,我留给你(因为它是家庭作业)。
(或者我应该对 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
你不在数组中,因为你使用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 回答