java : remove words from ArrayList<String>

标签 java arrays arraylist linked-list

假设我的单词数组是words={"a","the","in","if","are","it","is"},我的ArrayList包含这样的字符串{"a"表格在这里”,“书已售出”,“如果可读”}。我想从 arrayList 中删除 array 的所有单词。 预期输出将是 ArrayList,如 {"table here","books sell","re​​aded"}。

到目前为止我已经尝试过:

public static void main(String[] args) {
        String[] words = {"a","the","in","if","are","it","is"};
        List<String> wordList = new ArrayList<String>(Arrays.asList(words));
        String[] tArray = {"a table is here", "books are sold","if it is readable"};
        List<String> list = new ArrayList<String>(Arrays.asList(tArray));

        for (int i = 0; i < list.size(); i++) {
            String[] tArrays = list.get(i).split(" ");
            List<String> line = new ArrayList<String>(Arrays.asList(tArrays));
                for (int c = 0; c < wordList.size(); c++) {
                    if (wordList.get(c).equals(line.get(i))) {
                        line.remove(i);
                        i--;
                        break;
                    }
                }//end for
            list.set(i, String.join(" ", line));
        }//end for
        for(String string : list) 
        {
            System.out.println(string);
        }
    }

但没有给出预期的输出。相反,给出错误“java.lang.ArrayIndexOutOfBoundsException:-1”

最佳答案

您应该使用 line.size() 迭代基于“”拆分后的所有单词。

for (int i = 0; i < list.size(); i++) {
        String[] tArrays = list.get(i).split(" ");
        List<String> line = new ArrayList<>(Arrays.asList(tArrays));
        for (int c = 0; c < wordList.size(); c++) {
            if (wordList.get(c).equals(line.get(i))) { // you get i for indexes corresponding to the sentence element and not `line` elements as created above
                line.remove(i); // i is iterated over the list of sentences in your case 3, would start from i=0
                i--; // you change it to '-1' and get IndexOutOfBounds
                break;
            }
        }//end for
        list.set(i, String.join(" ", line));
    }//end for
<小时/>

虽然没有经过测试,但你可以做类似的事情 -

public static void main(String[] args) {
    String[] words = {"a", "the", "in", "if", "are", "it", "is"};
    List<String> wordList = new ArrayList<>(Arrays.asList(words));
    String[] tArray = {"a table is here", "books are sold", "if it is readable"};
    List<String> list = new ArrayList<>(Arrays.asList(tArray));

    for (int i = 0; i < list.size(); i++) {
        String[] tArrays = list.get(i).split(" ");
        List<String> line = new ArrayList<>(Arrays.asList(tArrays));
        for (String lineElement : line) {
            if (wordList.contains(lineElement)) {
                line.remove(lineElement);
            }
        }

        list.set(i, String.join(" ", line));
    }

    for (String string : list) {
        System.out.println(string);
    }
}

关于java : remove words from ArrayList<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41907518/

相关文章:

select - GT.M 的 JavaM API - SELECT 支持

java - 在结果集中使用 getter

javascript - 使用循环返回子集

c++ - 类对象的选择排序数组

java vector 到arraylist

java - 让一个类成为几个父类(super class)的子类

java - Grails 3.2.3 与 JDK 9 不兼容

c - 如何在 C 中将结构体数组中的名称值作为引用传递?

java - Java中如何将ArrayList中的第一个元素打印到HashSet中

java - 列表已满时抛出IllegalArgumentException