1. Gambaran keseluruhan
Sederhananya, pustaka Teks Apache Commons mengandungi sejumlah kaedah utiliti berguna untuk bekerja dengan Strings , di luar apa yang ditawarkan oleh inti Java.
Dalam pengenalan ringkas ini, kita akan melihat apa itu Apache Commons Text, dan apa itu digunakan, serta beberapa contoh praktikal menggunakan perpustakaan.
2. Ketergantungan Maven
Mari mulakan dengan menambahkan kebergantungan Maven berikut ke pom.xml kami :
org.apache.commons commons-text 1.1
Anda boleh mendapatkan versi terkini perpustakaan di Maven Central Repository.
3. Gambaran keseluruhan
Pakej root org.apache.commons.text dibahagikan kepada sub-pakej yang berbeza:
- org.apache.commons.text.diff - perbezaan antara Rentetan
- org.apache.commons.text.similarity - persamaan dan jarak antara Rentetan
- org.apache.commons.text.translate - menterjemahkan teks
Mari lihat untuk apa setiap pakej boleh digunakan - dengan lebih terperinci.
3. Mengendalikan Teks
The org.apache.commons.text pakej mengandungi pelbagai alat untuk bekerja dengan Strings.
Sebagai contoh, WordUtils memiliki API yang mampu memanfaatkan huruf pertama setiap kata dalam String, menukar huruf String, dan memeriksa apakah String berisi semua kata dalam array tertentu.
Mari lihat bagaimana kita dapat memanfaatkan huruf pertama setiap kata dalam Rentetan:
@Test public void whenCapitalized_thenCorrect() { String toBeCapitalized = "to be capitalized!"; String result = WordUtils.capitalize(toBeCapitalized); assertEquals("To Be Capitalized!", result); }
Inilah cara kita dapat memeriksa apakah rentetan mengandungi semua kata dalam array:
@Test public void whenContainsWords_thenCorrect() { boolean containsWords = WordUtils .containsAllWords("String to search", "to", "search"); assertTrue(containsWords); }
StrSubstitutor menyediakan cara mudah untuk membina Strings dari templat:
@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 . Ia menyediakan beberapa ciri baru yang tidak disediakan oleh StringBuilder .
Sebagai contoh, kita dapat mengganti semua kejadian String dalam String lain atau membersihkan String tanpa memberikan objek baru untuk rujukannya.
Berikut adalah contoh ringkas untuk menggantikan bahagian String:
@Test public void whenReplaced_thenCorrect() { StrBuilder strBuilder = new StrBuilder("example StrBuilder!"); strBuilder.replaceAll("example", "new"); assertEquals(new StrBuilder("new StrBuilder!"), strBuilder); }
Untuk membersihkan String, kita hanya boleh melakukannya dengan memanggil kaedah clear () pada pembangun:
strBuilder.clear();
4. Mengira Perbezaan Antara Rentetan
Pakej org.apache.commons.text.diff menerapkan algoritma Myers untuk mengira perbezaan antara dua String .
Perbezaan di antara dua Strings ditakrifkan oleh urutan pengubahsuaian yang boleh menukar satu tali yang lain.
Terdapat tiga jenis perintah yang dapat digunakan untuk mengubah String ke yang lain - InsertCommand , KeepCommand , dan DeleteCommand .
An EditScript objek memegang skrip yang perlu dijalankan untuk menukar tali yang lain. Mari hitung bilangan pengubahsuaian single-char yang harus dilakukan untuk menukar String ke String 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 Antara Rentetan
The org.apache.commons.text.similarity pakej mengandungi algoritma berguna untuk mencari persamaan dan jarak antara Strings.
Sebagai contoh, LongestCommonSubsequence boleh digunakan untuk mencari bilangan watak biasa dalam dua String :
@Test public void whenCompare_thenCorrect() { LongestCommonSubsequence lcs = new LongestCommonSubsequence(); int countLcs = lcs.apply("New York", "New Hampshire"); assertEquals(5, countLcs); }
Begitu juga, LongestCommonSubsequenceDistance boleh digunakan untuk mencari bilangan watak yang berbeza 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 pakej pada mulanya dicipta untuk membolehkan kita untuk menyesuaikan kaedah-kaedah yang disediakan oleh StringEscapeUtils .
Pakej ini mempunyai sekumpulan kelas yang bertanggungjawab untuk menerjemahkan teks ke beberapa model pengekodan watak yang berbeza seperti Unicode dan Numeric Character Reference. Kami juga boleh membuat rutin tersendiri untuk terjemahan.
Mari lihat bagaimana kita boleh menukar String ke 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 menyampaikan indeks watak yang ingin kami mulakan terjemahan dari kaedah di atas () .
LookupTranslator membolehkan kita menentukan jadual carian kita sendiri di mana setiap watak boleh mempunyai nilai yang sepadan, dan kita dapat menterjemahkan teks apa pun ke setara yang sesuai.
7. Kesimpulannya
Dalam tutorial ringkas ini, kami telah melihat gambaran keseluruhan mengenai apa itu Teks Apache Commons dan beberapa ciri umum.
Sampel kod boleh didapati di GitHub.