#java #regex #string #search #replace
#java #регулярное выражение #строка #Поиск #заменить
Вопрос:
У меня есть следующая строка, как мне выполнить поиск и заменить ее в Java?
Перед
*animal is a *ANImal and *Bird is a *bIrd.
После поиска и замены это должно быть *животное = Собака и * птица = Павлин
Dog is a Dog and Peacock is a Peacock.
Я попытался заменить вхождения этим шаблоном — (?i) \* animal, но это не работает. Что я делаю не так?
Комментарии:
1. Используйте Pattern.quote() пример: str.replaceAll(«(?i)» Pattern.quote(«*животное»), «Собака») то же самое для «* птицы»
Ответ №1:
public String replaceStrPattern(String str, String pattern, String replaceWith) {
String newStr = str;
String nonAlphaNumeric = "[^a-zA-Z0-9]";
String[] words = str.split(" ");
for(String word : words) {
word = word.replaceAll(nonAlphaNumeric, "").trim();
if(word.equalsIgnoreCase(pattern))
newStr = newStr.replace(word, replaceWith);
}
return newStr;
}
Комментарии:
1. Да, это, возможно, решило бы эту конкретную проблему, как указано, но это лишило бы цели попытки найти общее решение для конкретного случая, что всегда предпочтительнее, чем поиск конкретного решения, которое решит только один случай. Возьмите хорошую книгу о шаблонах проектирования и прочитайте, это того стоит
![]()
2. Эту идею можно обобщить, если вы подумаете об этом, прежде чем давать бессмысленный комментарий… Идея состоит в том, чтобы разделить предложение (как вы его разделяете, зависит от входного и текстового формата) и заменить отдельные слова, соответствующие определенному шаблону.
3. Извините, если вы посчитали комментарий бессмысленным — он должен был быть конструктивным, а не снисходительным. Мои извинения, возможно, я мог бы выразиться яснее. Суть заключалась в том, что, хотя подход действителен, решение, которое не требует жестко закодированных строк и работает в общем виде, будет полезно большему количеству людей. В конце концов, шаблоны предназначены для того, чтобы не изобретать велосипед заново и повторно использовать подходы к проблемам, которые могут быть применены к ряду других, похожих.
4. Я согласен с этим, но в приведенном выше решении есть сам шаблон, и это занимает ровно 1 минуту. абстрагировать жестко закодированную часть и сделать ее общей… Я бы сказал, что это скорее алгоритмический подход, а не шаблон проектирования, и вы можете использовать несколько направлений для его решения — replace, regex, StringUtils … все они действительны