Как с помощью метода replace(CharSequence target, CharSequence replacement)
String сделать цель нечувствительной к регистру?
Например, как это работает сейчас:
String target = "FooBar";
target.replace("Foo", "") // would return "Bar"
String target = "fooBar";
target.replace("Foo", "") // would return "fooBar"
Как я могу сделать так, чтобы замена (или если есть более подходящий метод) регистронезависима, чтобы оба примера возвращали "Bar"?
target.replaceAll("(?i)"+Pattern.quote("foo"), "");
Если вас не волнует case, то, возможно, вам не важно, возвращает ли он все upcase:
источник
Возможно, не так элегантно, как другие подходы, но он довольно надежен и прост в использовании, особенно. для новичков в Java. Одна вещь, которая мне нравится в классе String, заключается в следующем: он существует уже очень давно, и хотя он поддерживает глобальную замену регулярным выражением и глобальную замену строками (через CharSequences), последний не имеет простого логического параметра : 'isCaseInsensitive'. На самом деле, вы могли подумать, что, просто добавив этот маленький переключатель, можно было бы избежать всех проблем, которые вызывает его отсутствие, особенно для новичков. Теперь в JDK 7 String по- прежнему не поддерживает это небольшое дополнение!
Ну, в любом случае, хватит хвататься. Для всех, особенно новичков в Java, вот вам ваш "вырезать и вставить" deus ex machina . Как я уже сказал, он не такой элегантный и не принесет вам никаких призов за программирование, но он работает и надежен. Любые комментарии, не стесняйтесь вносить свой вклад. (Да, я знаю, StringBuffer, вероятно, лучший выбор для управления строками мутации из двух символьных строк, но достаточно легко поменять методы.)
источник
Регулярными выражениями довольно сложно управлять из-за того, что некоторые символы зарезервированы: например,
"foo.bar".replaceAll(".")
создается пустая строка, потому что точка означает «что угодно». Если вы хотите заменить только точку, следует указать в качестве параметра"\\."
.Более простое решение - использовать объекты StringBuilder для поиска и замены текста. Требуется два: один содержит текст в нижнем регистре, а второй - исходную версию. Поиск выполняется по содержимому в нижнем регистре, и обнаруженный индекс также заменит исходный текст.
источник
Для символов, отличных от Unicode:
источник
org.apache.commons.lang3.StringUtils:
общедоступная статическая строка replaceIgnoreCase (текст строки, строка searchString, замена строки)
Без учета регистра заменяет все вхождения строки в другую строку.
источник
Мне нравится SMAS «ы ответ , который использует
replaceAll
с регулярным выражением. Если вы собираетесь выполнять одну и ту же замену много раз, имеет смысл предварительно скомпилировать регулярное выражение один раз:источник
Просто сделайте это простым без сторонних библиотек:
источник