Как удалить несколько слов (подстрок) из строки
Есть задача, нужно удалить несколько подстрок которые поступают в массиве из заданной строки. Не могу понять как это реализовать. Пока пришел к такому коду, но он работает не верно.
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 + " ";
}
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Решение с использованием 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'