ApacheCommonsテキストの概要

1。概要

簡単に言えば、Apache Commons Textライブラリには、コアJavaが提供するもの以外にも、文字列を操作するための便利なユーティリティメソッドが多数含まれています。

この簡単な紹介では、Apache Commons Textとは何か、その使用目的、およびライブラリーの実際の使用例をいくつか紹介します。

2.Mavenの依存関係

次のMaven依存関係をpom.xmlに追加することから始めましょう:

 org.apache.commons commons-text 1.1 

ライブラリの最新バージョンは、Maven中央リポジトリにあります。

3.概要

ルートパッケージorg.apache.commons.textは、さまざまなサブパッケージに分割されています。

  • org.apache.commons.text.diff文字列間の差分
  • org.apache.commons.text.similarity文字間の類似性と距離
  • org.apache.commons.text.translate –テキストの翻訳

各パッケージの用途を詳しく見ていきましょう。

3.テキストの処理

org.apache.commons.textパッケージには、を操作するための複数のツールが含まれている文字列。

たとえば、WordUtilsには、文字列内の各単語の最初の文字を大文字にし、文字列の大文字と小文字を入れ替え、文字列に特定の配列内のすべての単語が含まれているかどうかを確認できるAPIがあります。

文字列内の各単語の最初の文字を大文字にする方法を見てみましょう

@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は、テンプレートから文字列を作成するための便利な方法を提供します。

@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.StringBuilderStringBuilderでは提供されないいくつかの新機能を提供します。

たとえば、別の文字内の文字列のすべての出現箇所を置き換えたり、参照に新しいオブジェクトを割り当てずに文字列をクリアしたりできます。

文字列の一部を置き換える簡単な例を次に示します。

@Test public void whenReplaced_thenCorrect() { StrBuilder strBuilder = new StrBuilder("example StrBuilder!"); strBuilder.replaceAll("example", "new"); assertEquals(new StrBuilder("new StrBuilder!"), strBuilder); }

文字列をクリアするには、ビルダーでclear()メソッドを呼び出すだけです。

strBuilder.clear();

4.文字列間の差異の計算

パッケージorg.apache.commons.text.diffは、2つの文字列間の差分を計算するためのMyersアルゴリズムを実装しています。

2つの文字列間の差分は、ある文字列を別の文字列に変換できる一連の変更によって定義されます。

変換するために使用できるコマンドの3種類があります文字列を-別のInsertCommandはKeepCommand、およびDeleteCommandのは

EditScriptのオブジェクトは、変換するために実行する必要がありますスクリプト保持している文字列別にします。文字列を別の文字列に変換するために行う必要のある単一文字の変更の数を計算してみましょう。

@Test public void whenEditScript_thenCorrect() { StringsComparator cmp = new StringsComparator("ABCFGH", "BCDEFG"); EditScript script = cmp.getScript(); int mod = script.getModifications(); assertEquals(4, mod); }

5.文字列間の類似性と距離

org.apache.commons.text.similarityのパッケージには、間の類似点との距離見つけるのに便利なアルゴリズムが含まれた文字列を。

たとえば、LongestCommonSubsequenceを使用して、2つの文字の共通文字の数を見つけることができます。

@Test public void whenCompare_thenCorrect() { LongestCommonSubsequence lcs = new LongestCommonSubsequence(); int countLcs = lcs.apply("New York", "New Hampshire"); assertEquals(5, countLcs); }

同様に、LongestCommonSubsequenceDistanceを使用して、2つの文字内の異なる文字の数を見つけることができます。

@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や数値文字参照などのさまざまな文字エンコードモデルへのテキストの変換を担当するクラスのセットが含まれています。翻訳用に独自にカスタマイズしたルーチンを作成することもできます。

文字列を同等の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の概要とその一般的な機能のいくつかを見てきました。

コードサンプルはGitHubにあります。