我试图使用以下代码过滤掉数组中的特定字符串,但是当我尝试运行它时它会一直崩溃。
public String[] lister(String[] fl){
String[] filelist = {};
int j = 0;
for(int i = 0; i < fl.length; i++){
if (fl[i].contains("Incident ")){
filelist[j] = fl[i];
j++;
}
}
return filelist;
}
我已经尝试了一些东西,似乎就是那个
filelist[j] = fl[i];
是罪魁祸首。 我跑的时候
public String[] lister(String[] fl){
String[] filelist = {};
int j = 0;
for(int i = 0; i < fl.length; i++){
if (fl[i].contains("Incident ")){
//filelist[j] = fl[i];
j++;
}
}
filelist = fl;
return filelist;
}
它不会崩溃,即使它运行forloop。显然结果不是我需要的。
我不明白为什么会这样做?由于某种原因,它感觉好像没有看到文件列表&#39;在forloop中初始化。
答案 0 :(得分:2)
而不是数组使用ArrayList
。
List<String> filelist = new ArrayList();
for(int i = 0; i < fl.length; i++){
if (fl[i].contains("Incident ")){
filelist.add(fl[i]);
}
}
return filelist;
答案 1 :(得分:1)
不可能声明未知长度的数组,数组的长度是常量。最好使用java.util.List
或ArrayList
等List
实施。
或者给你的数组大小
String[] filelist = new String[3];
解决方案1:使用ArrayList
public String[] lister(String[] fl){
List<String> filelist = new ArrayList();
for(int i = 0; i < fl.length; i++){
if (fl[i].contains("Incident ")){
filelist.add(fl[i]);
}
}
return filelist;
}
解决方案2:为数组提供固定长度(仅当您知道长度时才有用)
public String[] lister(String[] fl){
String[] filelist = new String[3]; // or any size
for(int i = 0; i < fl.length; i++){
if (fl[i].contains("Incident ")){
filelist[i] = fl[i];
}
}
return filelist;
}
注意:并非真正需要变量j
答案 2 :(得分:0)
这是因为变量filelist
的长度为 0 ,因为您没有提供值{}
,因此您获得ArrayIndexOutOfBoundsException无论filelist[j]
的值是什么,j
总是会超出数组边界,所以你必须像下面那样定义它:
String[] filelist = new String[fl.length];