两个数组与三个 for 循环的比较

Two arrays comparison with three for loops

我的标题不是最好的,但我没有任何其他想法。我有一个 List 的 object 具有 List 类别参数和一个 String。字符串类似于:"action,azione adventure,avventura horror sport "。我必须用空格将其拆分以获得字符串数组,例如:["action,azione", "adventure,avventura", "horror", "sport"]。 如果他的列表类别项目不包含在字符串数组中,我必须从 objects 的列表中删除一个项目。 我知道这听起来很棘手,所以我举个例子:

数组:["action,azione", "adventure,avventura", "horror", "sport"]

列表类别(实际列表 object):["action", "adventure", "horror", "comic", "sport"] remain

数组:["action,azione", "adventure,avventura", "horror", "sport"]

列表类别(实际列表 object):["azione", "horror", "comico", "sport"] 删除,因为没有冒险类别

这是我的尝试:

listaManga.getManga() 是 objects

的列表

listaManga.getManga().get(index).getC() 是 object

的类别列表

String[] categories 是按空格拆分的字符串

String[] categories = MainActivity.categories.split(" ");

    for (int i = 0; i < listaManga.getManga().size(); i++) {
        for (int j = 0; j < categories.length; j++) {
            for (int z = 0; z < listaManga.getManga().get(i).getC().size(); z++) {
                if (!categories[j].contains(String.valueOf(listaManga.getManga().get(i).getC().get(z)))) {
                      listaManga.getManga().remove(i);
                      break;
                }
            }
        }
   }

它在 j 值上抛出 IndexOutOfBoundsException

看看以下是否有效。

String[] categories = MainActivity.categories.split(" ");
boolean found = false;
for (int i = (listaManga.getManga().size() - 1); i >= 0; i--) {
    found = false;
    for (int j = (categories.length - 1); j >= 0; j--) {
        for (int z = (listaManga.getManga().get(i).getC().size() - 1); z >= 0; z--) {
            if (!categories[j].contains(String.valueOf(listaManga.getManga().get(i).getC().get(z)))) {
                  listaManga.getManga().remove(i);
                  // Either do this
                  // i = i - 1;
                  // or put a flag here that is
                  // found == true;

                  break;
            }

            //if(found == true){
            //     break;
            //}
        }
    }
   }

我终于按照逆循环的思路解决了它,但我不得不更改 muasif80 的代码,导致他的代码出现问题: 只有在 listaManga.getManga().get(i).getC() 中没有更多类别时,它才能获得正确的类别。我举个例子:如果我有 ["comic", "adventure"] 作为 String[] categories,它将找到所有具有 ["comic", "adventure"] 类别的列表项,但不会找到具有更多其他类别的项目,例如:["comic", "adventure", "horror"] .

我设置了一个新字符串来检查所有可能性:

String is_contained = "";
String[] categories = MainActivity.categories.split(" ");
for (int i = (listaManga.getManga().size() - 1); i >= 0; i--) {
    if(listaManga.getManga().get(i).getC().size()==0){
         listaManga.getManga().remove(i);
    } else {
         for (int j = (categories.length - 1); j >= 0; j--) {
            is_contained = "";
            for (int z = (listaManga.getManga().get(i).getC().size() - 1); z >= 0; z--) {
                if (!categories[j].toLowerCase().contains((String.valueOf(listaManga.getManga().get(i).getC().get(z))).toLowerCase())) {
                      is_contained += "a";
                } else {
                      is_contained += "b";
                }
            }
            if (!is_contained.toLowerCase().contains(("b").toLowerCase())) {
                listaManga.getManga().remove(i);
                break;
            }
        }
    }
}

P.s。另外,如果这是最正确的答案,我会接受 muasif80 一直以来他在聊天中献给我的答案!