【问题标题】:Android crashes when looping through a string array [Android Studio]循环遍历字符串数组时 Android 崩溃 [Android Studio]
【发布时间】:2016-01-12 13:27:20
【问题描述】:

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

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。显然结果不是我需要的。

我不明白为什么会这样?出于某种原因,感觉好像它没有看到在 forloop 中初始化的“文件列表”。

【问题讨论】:

  • 您试图声明一个长度未知的数组,这是不可能的。改用ArrayList 或给你的数组一个固定的长度。
  • 发生了什么意外?

标签: android arrays string


【解决方案1】:

使用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;

【讨论】:

  • @Cer 如果我的回答有帮助,请将其标记为已接受(同时考虑其他答案并将最佳答案标记为已接受)。
  • @HiI'mFrogatto 很公平:D
【解决方案2】:

无法声明长度未知的数组,数组的长度是恒定的。最好使用java.util.List 实现,例如ArrayListList

或者给你的数组一个大小,比如

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 并不是真正需要的

【讨论】:

    【解决方案3】:

    这是因为变量filelist 的长度是0,因为你没有给{} 赋值,所以你得到ArrayIndexOutOfBoundsException 因为filelist[j] 总是会超过数组边界j 的值是,所以你必须像下面这样定义它:

    String[] filelist = new String[fl.length];
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2017-10-06
      • 1970-01-01
      • 2019-08-03
      • 2022-01-16
      • 2019-09-07
      相关资源
      最近更新 更多