Рубрики
Без рубрики

Удалить или заменить часть строки в Java

Изучите несколько способов удаления и замены подразрядки на Java.

Автор оригинала: baeldung.

1. Обзор

В этом учебнике мы будем рассматривать различные средства, которые мы можем удалить или заменить часть Струнные на Яве.

Мы изучить удаление и/или замену подразрядки с помощью Струнные API, затем с помощью Стрингбилдер API и, наконец, с помощью СтрингУтилс класса библиотеки Apache Commons.

В качестве бонуса, Мы также будем смотреть на замену точное слово, используя API строки и apache Commons RegExUtils класс .

2. Строка API

Одним из самых простых и простых методов замены подразрядки является использование заменить, заменитьВсе или заменитьПервый из Струнный класс.

заменить () метод принимает два аргумента – целевой и замены текста:

String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";
String processed = master.replace(target, replacement);
assertTrue(processed.contains(replacement));
assertFalse(processed.contains(target));

Вышеупомянутый фрагмент даст этот вывод:

Hello World Java!

Если при выборе цели требуется регулярное выражение, то заменитьВсе () или заменитьПервый () должен быть метод выбора. Как следует из их названия, заменитьВсе () заменит каждое совпадение, в то время как заменитьПервый () заменит первое совпадение:

String master2 = "Welcome to Baeldung, Hello World Baeldung";
String regexTarget = "(Baeldung)$";
String processed2 = master2.replaceAll(regexTarget, replacement);
assertTrue(processed2.endsWith("Java"));

Значение обработано2 будет:

Welcome to Baeldung, Hello World Java

Это потому, что regex поставляется как regexTarget будет соответствовать только последнему появлению Бэлдунг. Во всех примерах, приведенных выше, мы можем использовать пустую замену, и это будет эффективно удалить целевые из мастер .

3. Api StringBuilder

Мы также можем манипулировать текстом на Java, используя Стрингбилдер класс . Два метода здесь удалить () и заменить () .

Мы можем построить экземпляр Стрингбилдер из существующего Струнные а затем использовать упомянутые методы для выполнения Струнные манипуляции по желанию:

String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";

int startIndex = master.indexOf(target);
int stopIndex = startIndex + target.length();

StringBuilder builder = new StringBuilder(master);

Теперь мы можем удалить целевые с удалить () :

builder.delete(startIndex, stopIndex);
assertFalse(builder.toString().contains(target));

Мы также можем использовать заменить () обновить мастера:

builder.replace(startIndex, stopIndex, replacement);
assertTrue(builder.toString().contains(replacement));

Одно явное различие между использованием Стрингбилдер и Струнные API заключается в том, что мы должны получить стартовый и стоп-индекс целевые Струнные себя.

4. Класс StringUtils

Другим методом, который мы рассмотрим, является библиотека Apache Commons.

Во-первых, давайте добавим необходимую зависимость к нашему проекту:


    org.apache.commons
    commons-lang3
    3.11

Последнюю версию библиотеки можно найти здесь.

СтрингУтилс класс имеет методы замены подразрядки Струнные :

String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";

String processed = StringUtils.replace(master, target, replacement);
assertTrue(processed.contains(replacement));

Существует перегруженный вариант заменить () что занимает более интегративную макс параметр, который определяет количество возникновений для замены. Мы также можем использовать заменитьИгнорКейс () если чувствительность к делу не является проблемой :

String master2 = "Hello World Baeldung!";
String target2 = "baeldung";
String processed2 = StringUtils.replaceIgnoreCase(master2, target2, replacement);
assertFalse(processed2.contains(target));

5. Замена точных слов

В этом последнем примере Мы научимся заменять точное слово внутри Струнные .

Простой способ выполнить эту замену использует регулярное выражение с границами слов.

Регулярное выражение границы слова Зб . Включение нужного слова в это обычное выражение будет соответствовать только точным явлениям.

Во-первых, давайте посмотрим, как использовать это обычное выражение с API строки:

String sentence = "A car is not the same as a carriage, and some planes can carry cars inside them!";
String regexTarget = "\\bcar\\b";
String exactWordReplaced = sentence.replaceAll(regexTarget, "truck");

exactWordReplaced строка содержит:

"A truck is not the same as a carriage, and some planes can carry cars inside them!"

Только точное слово будет заменено. Обратите назад черту всегда необходимо избежать при работе с регулярными выражениями на Java.

Альтернативным способом сделать эту замену является использование RegExUtils класс из библиотеки Apache Commons, который может быть добавлен в качестве зависимости, как мы видели в предыдущем разделе:

String regexTarget = "\\bcar\\b";
String exactWordReplaced = RegExUtils.replaceAll(sentence, regexTarget, "truck");

Хотя оба метода будут приносить один и тот же результат, решение о том, какой из них следует использовать, будет зависеть от нашего конкретного сценария.

6. Заключение

В заключение мы изучили несколько способов удаления и замены подразрядки на Java. Наилучший метод применения по-прежнему во многом зависит от текущей ситуации и контекста.

Как обычно, полный исходный код доступен более на Github .