Pengantar Teks Apache Commons

1. Ikhtisar

Sederhananya, pustaka Teks Apache Commons berisi sejumlah metode utilitas yang berguna untuk bekerja dengan Strings , di luar apa yang ditawarkan Java inti.

Dalam pengantar singkat ini, kita akan melihat apa itu Apache Commons Text, dan apa kegunaannya, serta beberapa contoh praktis penggunaan perpustakaan.

2. Ketergantungan Maven

Mari kita mulai dengan menambahkan dependensi Maven berikut ke pom.xml kita :

 org.apache.commons commons-text 1.1 

Anda dapat menemukan versi terbaru pustaka di Maven Central Repository.

3. Ikhtisar

Paket akar org.apache.commons.text dibagi menjadi beberapa sub-paket:

  • org.apache.commons.text.diff - perbedaan antara String
  • org.apache.commons.text.similarity - persamaan dan jarak antara String
  • org.apache.commons.text.translate - menerjemahkan teks

Mari kita lihat untuk apa setiap paket dapat digunakan - lebih detail.

3. Menangani Teks

The org.apache.commons.text paket berisi beberapa alat untuk bekerja dengan Strings.

Misalnya, WordUtils memiliki API yang mampu memanfaatkan huruf pertama dari setiap kata dalam String, menukar kasus String, dan memeriksa apakah String berisi semua kata dalam array tertentu.

Mari kita lihat bagaimana kita bisa memanfaatkan huruf pertama dari setiap kata dalam String:

@Test public void whenCapitalized_thenCorrect() { String toBeCapitalized = "to be capitalized!"; String result = WordUtils.capitalize(toBeCapitalized); assertEquals("To Be Capitalized!", result); }

Berikut adalah bagaimana kita dapat memeriksa apakah sebuah string berisi semua kata dalam sebuah array:

@Test public void whenContainsWords_thenCorrect() { boolean containsWords = WordUtils .containsAllWords("String to search", "to", "search"); assertTrue(containsWords); }

StrSubstitutor menyediakan cara mudah untuk membuat Strings dari template:

@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 adalah alternatif untuk Java.lang.StringBuilder . Ini menyediakan beberapa fitur baru yang tidak disediakan oleh StringBuilder .

Misalnya, kita dapat mengganti semua kemunculan String di String lain atau menghapus String tanpa menetapkan objek baru ke referensinya.

Berikut contoh cepat untuk mengganti bagian dari String:

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

Untuk menghapus String, kita cukup melakukannya dengan memanggil metode clear () pada pembuat:

strBuilder.clear();

4. Menghitung Perbedaan Antar String

Paket org.apache.commons.text.diff mengimplementasikan algoritma Myers untuk menghitung perbedaan antara dua String.

Perbedaan antara dua String ditentukan oleh urutan modifikasi yang dapat mengubah satu String ke string lainnya.

Ada tiga jenis perintah yang dapat digunakan untuk mengonversi String ke yang lain - InsertCommand , KeepCommand , dan DeleteCommand .

Sebuah EditScript objek memegang script yang harus dijalankan untuk mengkonversi String yang lain. Mari kita hitung jumlah modifikasi karakter tunggal yang harus dilakukan untuk mengonversi String ke yang lain:

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

5. Persamaan dan Jarak Antar String

The org.apache.commons.text.similarity paket berisi algoritma berguna untuk menemukan persamaan dan jarak antara Strings.

Misalnya, LongestCommonSubsequence dapat digunakan untuk menemukan jumlah karakter umum dalam dua String :

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

Demikian pula, LongestCommonSubsequenceDistance dapat digunakan untuk menemukan jumlah karakter berbeda dalam dua String :

@Test public void whenCalculateDistance_thenCorrect() { LongestCommonSubsequenceDistance lcsd = new LongestCommonSubsequenceDistance(); int countLcsd = lcsd.apply("New York", "New Hampshire"); assertEquals(11, countLcsd); }

6. Terjemahan Teks

The org.apache.text.translate paket awalnya diciptakan untuk memungkinkan kita untuk menyesuaikan aturan yang disediakan oleh StringEscapeUtils .

Paket ini memiliki sekumpulan kelas yang bertanggung jawab untuk menerjemahkan teks ke beberapa model pengkodean karakter yang berbeda seperti Unicode dan Referensi Karakter Numerik. Kami juga dapat membuat rutinitas khusus kami sendiri untuk terjemahan.

Mari kita lihat bagaimana kita dapat mengubah String menjadi teks Unicode yang setara:

@Test public void whenTranslate_thenCorrect() { UnicodeEscaper ue = UnicodeEscaper.above(0); String result = ue.translate("ABCD"); assertEquals("\\u0041\\u0042\\u0043\\u0044", result); }

Di sini, kami meneruskan indeks karakter yang ingin kami terjemahkan dari metode di atas () .

LookupTranslator memungkinkan kita untuk menentukan tabel pencarian kita sendiri di mana setiap karakter dapat memiliki nilai yang sesuai, dan kita dapat menerjemahkan teks apa pun ke padanannya yang sesuai.

7. Kesimpulan

Dalam tutorial singkat ini, kita telah melihat gambaran umum tentang apa itu Apache Commons Text dan beberapa fitur umumnya.

Contoh kode dapat ditemukan di GitHub.