Apache Commons Textの概要
1. 概要
簡単に言えば、Apache Commons Textライブラリには、コアJavaが提供するもの以外にも、Stringsを操作するための便利なユーティリティメソッドが多数含まれています。
この簡単な紹介では、Apache Commons Textとは何か、その用途、およびライブラリの実際的な使用例をいくつか紹介します。
2. メーベン依存
次のMaven依存関係をpom.xmlに追加することから始めましょう。
org.apache.commons
commons-text
1.1
ライブラリの最新バージョンはMaven Central Repositoryにあります。
3. 概要
ルートパッケージorg.apache.commons.textは、さまざまなサブパッケージに分割されています。
-
org.apache.commons.text.diff –Strings間の差分
-
org.apache.commons.text.similarity –Strings間の類似性と距離
-
org.apache.commons.text.translate –テキストの翻訳
各パッケージの用途を詳しく見ていきましょう。
3. テキストの処理
org.apache.commons.textパッケージには、Strings.を操作するための複数のツールが含まれています
たとえば、WordUtilsには、String,の各単語の最初の文字を大文字にして、String,の大文字と小文字を入れ替え、Stringにすべての単語が含まれているかどうかを確認できるAPIがあります。与えられた配列。
String:の各単語の最初の文字を大文字にする方法を見てみましょう
@Test
public void whenCapitalized_thenCorrect() {
String toBeCapitalized = "to be capitalized!";
String result = WordUtils.capitalize(toBeCapitalized);
assertEquals("To Be Capitalized!", result);
}
文字列に配列内のすべての単語が含まれているかどうかを確認する方法は次のとおりです。
@Test
public void whenContainsWords_thenCorrect() {
boolean containsWords = WordUtils
.containsAllWords("String to search", "to", "search");
assertTrue(containsWords);
}
StrSubstitutorは、テンプレートからStringsを構築するための便利な方法を提供します。
@Test
public void whenSubstituted_thenCorrect() {
Map substitutes = new HashMap<>();
substitutes.put("name", "John");
substitutes.put("college", "University of Stanford");
String templateString = "My name is ${name} and I am a student at the ${college}.";
StrSubstitutor sub = new StrSubstitutor(substitutes);
String result = sub.replace(templateString);
assertEquals("My name is John and I am a student at the University of Stanford.", result);
}
StrBuilderはJava.lang.StringBuilderの代替です。 StringBuilderでは提供されないいくつかの新機能を提供します。
たとえば、新しいオブジェクトをその参照に割り当てずに、Stringを別のStringに置き換えたり、Stringをクリアしたりできます。
String:の一部を置き換える簡単な例を次に示します
@Test
public void whenReplaced_thenCorrect() {
StrBuilder strBuilder = new StrBuilder("example StrBuilder!");
strBuilder.replaceAll("example", "new");
assertEquals(new StrBuilder("new StrBuilder!"), strBuilder);
}
String,をクリアするには、ビルダーでclear()メソッドを呼び出すだけです。
strBuilder.clear();
4. Strings間の差異の計算
パッケージorg.apache.commons.text.diffは、2つのStrings.間の差分を計算するためのMyersアルゴリズムを実装します。
2つのStrings間の差分は、1つのStringを別のStringに変換できる一連の変更によって定義されます。
Stringを別のコマンドに変換するために使用できるコマンドには、InsertCommand、KeepCommand、およびDeleteCommandの3種類があります。
EditScriptオブジェクトは、Stringを別のオブジェクトに変換するために実行する必要のあるスクリプトを保持します。 Stringを別の文字に変換するために行う必要のある単一文字の変更の数を計算してみましょう。
@Test
public void whenEditScript_thenCorrect() {
StringsComparator cmp = new StringsComparator("ABCFGH", "BCDEFG");
EditScript script = cmp.getScript();
int mod = script.getModifications();
assertEquals(4, mod);
}
5. Strings間の類似性と距離
org.apache.commons.text.similarityパッケージには、Strings.間の類似性と距離を見つけるのに役立つアルゴリズムが含まれています。
たとえば、LongestCommonSubsequenceを使用して、2つのStringsの共通文字の数を見つけることができます。
@Test
public void whenCompare_thenCorrect() {
LongestCommonSubsequence lcs = new LongestCommonSubsequence();
int countLcs = lcs.apply("New York", "New Hampshire");
assertEquals(5, countLcs);
}
同様に、LongestCommonSubsequenceDistanceを使用して、2つのStrings内の異なる文字の数を見つけることができます。
@Test
public void whenCalculateDistance_thenCorrect() {
LongestCommonSubsequenceDistance lcsd = new LongestCommonSubsequenceDistance();
int countLcsd = lcsd.apply("New York", "New Hampshire");
assertEquals(11, countLcsd);
}
6. テキスト翻訳
org.apache.text.translateパッケージは、StringEscapeUtilsによって提供されるルールをカスタマイズできるようにするために最初に作成されました。
このパッケージには、UnicodeやNumeric Character Referenceなどのさまざまな文字エンコードモデルにテキストを変換する一連のクラスが含まれています。 また、翻訳用に独自のカスタマイズされたルーチンを作成することもできます。
Stringを同等のUnicodeテキストに変換する方法を見てみましょう。
@Test
public void whenTranslate_thenCorrect() {
UnicodeEscaper ue = UnicodeEscaper.above(0);
String result = ue.translate("ABCD");
assertEquals("\\u0041\\u0042\\u0043\\u0044", result);
}
ここでは、変換を開始する文字のインデックスをabove()メソッドに渡します。
LookupTranslatorを使用すると、各文字が対応する値を持つことができる独自のルックアップテーブルを定義でき、任意のテキストを対応する同等のテキストに変換できます。
7. 結論
このクイックチュートリアルでは、Apache CommonsTextの概要とその一般的な機能のいくつかを説明しました。
コードサンプルはover on GitHub.で見つけることができます