循环遍历字符串数组时Android崩溃[Android Studio]

时间:2016-01-12 13:27:20

标签: android arrays string

我试图使用以下代码过滤掉数组中的特定字符串,但是当我尝试运行它时它会一直崩溃。

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中初始化。

3 个答案:

答案 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.ListArrayListList实施。

或者给你的数组大小

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];