Заменить слово в листе Java
я новичок и столкнулся с проблемой, хочу заменить определённые слова в List, но не выходит.
Collections.replaceAll(list, "слово_1", "слово_2");
Работает, но не так, как мне надо. Он заменяет слово только в том случае, если оно единственное что есть в строке, то есть если:
Входящая строка:
слово_1 другие слова
другие слова слово_1
слово_1
То вернётся:
слово_1 другие слова
другие слова слово_1
слово_2
Пробовал так же через цикл, но почему-то он игнорируется:
for(String s : list) {
s.replaceAll("слово_1", "слово_2");
}
Ответы (1 шт):
Попробуйте так:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("слово_1 другие слова");
list.add("другие слова слово_1");
list.add("слово_1");
List<String> result = replace(list, "слово_1", "слово_2");
System.out.println(result);
}
public static List<String> replace(Iterable<String> itrb, String from, String to) {
return StreamSupport.stream(itrb.spliterator(), false)
.map(line->line.replace(from, to))
.collect(Collectors.toList());
}
}
Пишем специальный метод. Обратите внимание, что метод принимает Iterable - интерфейс, предоставляющий нам возможность передавать в аргументы при его вызове не только лист, но и любую другую коллекцию. Кроме того, в данном случае лучше использовать метод replace, а не replaceAll. Причина в том, что последний использует регулярные выражения, в связи с чем работает медленнее.