![](/img/trans.png)
[英]Java : how can i remove array of words from a LinkedList<ArrayList<String>>
[英]java : remove words from ArrayList<String>
假設我的單詞Array是words = {“ a”,“ the”,“ in”,“ if”,“ are”,“ it”,“ is”}},而我的ArrayList包含這樣的字符串{“表在這里”,“出售書本”,“如果可讀”}。 我想從arrayList中刪除array的所有單詞。 預期的輸出將是ArrayList,例如{“ table here”,“ books sold”,“ readable”}。
到目前為止,我已經嘗試過了:
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 8版本即可:
String[] filtered =
list.stream().map(statement -> Arrays.asList(statement.split(" ")))
.map(listOfWords -> listOfWords.stream()
.filter(word -> !wordList.contains(word))
.collect(Collectors.joining(" "))
)
.toArray(String[]::new);
List<String> filteredList = Arrays.asList(filtered);
您可以使用以下命令驗證輸出:
filteredList.stream().forEach(System.out::println);
希望這會有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.