Как удалить несколько слов (подстрок) из строки

Рейтинг: -1Ответов: 1Опубликовано: 19.01.2023

Есть задача, нужно удалить несколько подстрок которые поступают в массиве из заданной строки. Не могу понять как это реализовать. Пока пришел к такому коду, но он работает не верно.

        String phrase = "this is sparta";
        String[] words = new String[]{"is", "this"};
        String resultStr = "";
        String[] strArr = phrase.split(" ");

        for (String str : strArr) {
            for (String word : words) {
                if (!str.equals(word)) {
                    resultStr = resultStr + str + " ";
                }
            }
        }

Ответы

▲ 2Принят

Решение с использованием String::replaceAll -- для этого массив подстрок следует объединить при помощи операции |. Если нужно будет убрать оставшиеся пробелы, к результату можно применить String::trim:

public static String cleanPhrase(String phrase, String ... words) {
    return phrase.replaceAll(String.join("|", words), "").trim();
}

Тест:

System.out.println("'" + cleanPhrase("this is sparta", "is", "this") + "'");
// -> 'sparta'

Если подстроки могут содержать не только буквы/цифры, но и некоторые символы, которые используются в регулярных выражениях и нуждаются в экранировании, то придется преобразовать каждую подстроку в литерал при помощи Pattern::quote:

public static String cleanString(String str, String ... subs) {
    String replace = Arrays.stream(subs)
            .map(Pattern::quote)
            .collect(Collectors.joining("|"));
    return str.replaceAll(replace, "").trim();
}

System.out.println("'" + cleanString("|this is (sparta)|", "is", "this", "|", "(", ")") + "'");
// -> 'sparta'