1. 概要

このチュートリアルでは、JavaのStringの一部を削除または置換できるさまざまな方法について説明します。

String APIを使用してサブストリングを削除または置換し、次に StringBuilder APIを使用し、最後にApacheCommonsライブラリのStringUtilsクラスを使用する方法について説明します。

ボーナスとして、StringAPIとApacheCommonsRegExUtilsクラスを使用して正確な単語を置き換えることも検討します。

2. 文字列API

サブストリングを置き換える最も簡単で簡単な方法の1つは、Stringクラスのreplace、replaceAll 、またはreplaceFirstを使用することです。

replace()メソッドは、ターゲットと置換テキストの2つの引数を取ります。

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

processed2の値は次のようになります。

Welcome to Baeldung, Hello World Java

これは、正規表現が次のように提供されているためです。 regexTarget 最後に出現したものとのみ一致します Baeldung。 上記のすべての例では、空の置換を使用でき、マスターからターゲットを効果的に削除します

3. StringBuilder API

また、Javaでテキストを操作することもできます。 StringBuilder クラス 。 ここでの2つの方法は消去()交換()

既存のStringからStringBuilderのインスタンスを構築し、前述の方法を使用して、必要に応じて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()を使用してtargetを削除できます。

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

replace()を使用してマスターを更新することもできます。

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

StringBuilderString APIの使用の明らかな違いの1つは、 target String[の開始インデックスと停止インデックスを取得する必要があることです。 X176X]私たち自身。

4. StringUtilsクラス

検討するもう1つの方法は、ApacheCommonsライブラリです。

まず、必要な依存関係をプロジェクトに追加しましょう。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

ライブラリの最新バージョンはここにあります。

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. 正確な単語の置き換え

この最後の例では、文字列内の正確な単語を置き換える方法を学習します。

この置換を実行する簡単な方法は、単語境界のある正規表現を使用することです。

単語境界の正規表現は\bです。 この正規表現で目的の単語を囲むと、正確に一致する場合のみ一致します。

まず、StringAPIでこの正規表現を使用する方法を見てみましょう。

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で正規表現を操作する場合は、バックスラッシュを常にエスケープする必要があることに注意してください

この置換を行う別の方法は、ApacheCommonsLibraryのRegExUtilsクラスを使用することです。これは、前のセクションで見たように、依存関係として追加できます。

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

どちらの方法でも同じ結果が得られますが、どちらを使用するかは、特定のシナリオによって異なります。

6. 結論

結論として、Javaで部分文字列を削除および置換する複数の方法を検討しました。 適用するための最良の方法は、依然として現在の状況と状況に大きく依存します。

いつものように、完全なソースコードはGithubから入手できます。