Удалить строку длины 1 из коллекции, за исключением некоторых значений - PullRequest
4 голосов
/ 05 августа 2020

У меня есть Arraylist типа String с большим количеством слов, и в некоторых случаях это просто отдельные буквы. Например, буква «К». По сути, я пытаюсь удалить все символы одного экземпляра, ЗА ИСКЛЮЧЕНИЕМ «A» и «I». Вот код / ​​регулярное выражение, которое я пытался, но безрезультатно:

//removing all single letters
ArrayList<String> newList2 = new ArrayList<String>();
for(String word : words) {
  newList2.add(word.replace("[BCDEFGHJKLMOPQRSTUVWXYZ]", ""));
}
words = newList2;

Не использовать ли регулярное выражение? Есть ли лучший метод или есть способ, которым я неправильно использую регулярное выражение? Насколько я понимаю, моя реализация, если бы она даже сработала, заменила бы ее пустым местом, а не полностью удалила бы элемент ... Моя цель - полностью удалить элемент, если он существует, возможно, с помощью метода .remove ... Не уверен как go об этом. (JAVA)

(PS, в идеале я бы также удалил "=" и другие символы, если они очевидны, но символы - это моя проблема)

Ответы [ 2 ]

8 голосов
/ 05 августа 2020

Нет необходимости использовать для этого stream api. Здесь будет достаточно List#removeIf:

list.removeIf(s -> s.length() == 1 && ! List.of("A", "I").contains(s))

Примечание: это изменяющая операция.

1 голос
/ 05 августа 2020

Раствор с l oop:

for(int i=0; i < newList2.size(); i++){
    if(newList2.get(i).length() == 1){
        if(!newList2.get(i).equals("A") || !newList2.get(i).equals("I")){
            newList2.remove(i)
        }
    }
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...