Премахнете или заменете част от низ в Java

1. Общ преглед

В този урок ще разгледаме различни средства, чрез които можем да премахнем или заменим част от String в Java.

Ще проучим премахването и / или подмяната на подниз с помощта на String API, след това с помощта на StringBuilder API и накрая с помощта на класа StringUtils на библиотеката Apache Commons.

Като бонус ще разгледаме и замяната на точна дума, използвайки String API и клас Apache Commons RegExUtils .

2. API за низове

Един от най-простите и ясни методи за замяна на подниз е използването на replace, replaceAll или replaceFirst от String клас.

Методът replace () взема два аргумента - целеви и заместващ текст:

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!

Ако при избора на целта е необходим регулярен израз, тогава replaceAll () или replaceFirst () трябва да бъде избраният метод. Както подсказва името им, replaceAll () ще замени всяко съвпадащо събитие, докато replaceFirst () ще замени първото съвпадащо събитие:

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

Това е така, защото регулярният израз, предоставен като regexTarget, ще съответства само на последното появяване на Baeldung. Във всички примери, дадени по-горе, можем да използваме празен заместител и той ефективно ще премахне цел от мастер .

3. API на StringBuilder

Също така можем да манипулираме текст в Java, използвайки класа StringBuilder . Двата метода тук са delete () и replace () .

Можем да конструираме екземпляр на StringBuilder от съществуващ String и след това да използваме споменатите методи, за да извършим манипулацията на String по желание:

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);

Сега можем да премахнем целта с delete () :

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

Можем също така да използваме replace (), за да актуализираме главното:

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

Една очевидна разлика между използването на StringBuilder и String API е, че трябва сами да вземем началния и стоп индекса на целевия String .

4. StringUtils клас

Друг метод, който ще разгледаме, е библиотеката Apache Commons.

Първо, нека добавим необходимата зависимост към нашия проект:

 org.apache.commons commons-lang3 3.8.1 

Най-новата версия на библиотеката можете да намерите тук.

Класът StringUtils има методи за замяна на подниза на String :

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

Има претоварен вариант на replace (), който приема параметър за цяло число max , който определя броя на появяванията, които трябва да бъдат заменени. Можем да използваме и replaceIgnoreCase (), ако чувствителността към регистъра не е проблем :

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

5. Подмяна на точни думи

В този последен пример ще научим как да заменим точна дума в String .

Простият начин за извършване на тази подмяна е използването на регулярен израз с граници на думи.

Регулярният израз на границата на думата е \ b . Включването на желаната дума в този регулярен израз ще съответства само на точно срещане.

Първо, нека видим как да използваме този регулярен израз с String 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.