Javaで文字列の一部を削除または置換する

Javaで文字列の一部を削除または置換する

1. 概要

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

String APIを使用して部分文字列を削除または置換し、次にStringBuilder APIを使用し、最後にApache CommonsライブラリのStringUtilsクラスを使用する方法について説明します。

ボーナスとして、we’ll also look into replacing an exact word using the String API and the Apache Commons RegExUtils class

2. String API

部分文字列を置き換える最も簡単で簡単な方法の1つは、String class.replace, replaceAll またはreplaceFirstを使用することです。

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

String master = "Hello World example!";
String target = "example";
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 example, Hello World example";
String regexTarget = "(example)$";
String processed2 = master2.replaceAll(regexTarget, replacement);
assertTrue(processed2.endsWith("Java"));

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

Welcome to example, Hello World Java

これは、regexTargetとして提供された正規表現が、最後に出現したexample. In all examples given above, we can use an empty replacement and it’ll effectively remove a target from a masterとのみ一致するためです。

3. StringBuilder API

StringBuilderクラスを使用してJavaでテキストを操作することもできます。ここでの2つのメソッドは、delete()replace()です。

既存のStringからStringBuilder のインスタンスを構築し、前述の方法を使用して、必要に応じてString操作を実行できます。

String master = "Hello World example!";
String target = "example";
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));

StringBuilder String APIの使用の明らかな違いの1つは、targetStringの開始インデックスと停止インデックスを自分で取得する必要があることです。

4. StringUtilsクラス

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

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


    org.apache.commons
    commons-lang3
    3.8.1

ライブラリの最新バージョンはhere.で見つけることができます

StringUtils classには、Stringの部分文字列を置き換えるためのメソッドがあります。

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

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

整数のmaxパラメータを受け取るreplace()のオーバーロードされたバリアントがあります。これは、置き換えるオカレンスの数を決定します。 We can also use the replaceIgnoreCase() if case-sensitivity is not a concern

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

5. 正確な単語の置き換え

この最後の例では、we’ll learn how to replace an exact word inside a Stringです。

この置換を実行する簡単な方法は、単語の境界を持つusing a regular expressionです。

The word boundary regular expression is 。 この正規表現内で目的の単語を囲むと、完全に一致するもののみが一致します。

まず、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!"

Only the exact word will be replaced. Javaで正規表現を操作する場合は、backward slash always needs to be escapedに注意してください。

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

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

どちらの方法でも同じ結果が得られますが、どちらを使用するかは特定のシナリオに依存します。

6. 結論

結論として、Javaで部分文字列を削除および置換する複数の方法を検討しました。 最適な適用方法は、現在の状況とコンテキストに大きく左右されます。

いつものように、完全なソースコードはover on Githubで利用できます。