Hitung Kemunculan Char dalam String

1. Ikhtisar

Ada banyak cara untuk menghitung jumlah kemunculan karakter dalam String di Java.

Dalam artikel singkat ini, kami akan fokus pada beberapa contoh cara menghitung karakter, pertama, dengan pustaka inti Java dan kemudian dengan pustaka dan kerangka kerja lain seperti Spring dan Guava.

2. Menggunakan Core Java Lib

2 .1. Pendekatan Imperatif

Beberapa pengembang mungkin lebih suka menggunakan Java inti. Ada banyak cara untuk menghitung jumlah kemunculan karakter dalam String.

Mari kita mulai dengan pendekatan sederhana / naif:

String someString = "elephant"; char someChar = 'e'; int count = 0; for (int i = 0; i < someString.length(); i++) { if (someString.charAt(i) == someChar) { count++; } } assertEquals(2, count);

Tidak mengherankan ini akan berhasil, tetapi - juga tidak mengherankan - ada cara yang lebih baik untuk melakukan ini.

2.2. Menggunakan Rekursi

Solusi yang kurang jelas, tetapi masih menarik adalah dengan menggunakan rekursi:

private static int countOccurences( String someString, char searchedChar, int index) { if (index >= someString.length()) { return 0; } int count = someString.charAt(index) == searchedChar ? 1 : 0; return count + countOccurences( someString, searchedChar, index + 1); }

Kita bisa memanggil metode rekursif ini dengan cara berikut: useRecursionToCountChars ("elephant", 'e', ​​0)

2.4. Menggunakan Ekspresi Reguler

Cara lain adalah dengan menggunakan ekspresi reguler:

Pattern pattern = Pattern.compile("[^e]*e"); Matcher matcher = pattern.matcher("elephant"); int count = 0; while (matcher.find()) { count++; } assertEquals(2, count);

Perhatikan saja bahwa solusi ini secara teknis benar, tetapi kurang optimal, karena terlalu berlebihan menggunakan ekspresi reguler yang sangat kuat untuk menyelesaikan masalah sederhana seperti menemukan jumlah kemunculan karakter dalam sebuah string.

2.5. Menggunakan Fitur Java 8

Fitur-fitur baru yang tersedia di Java 8 bisa sangat membantu di sini.

Mari gunakan aliran dan lambda untuk mengimplementasikan hitungan:

String someString = "elephant"; long count = someString.chars().filter(ch -> ch == 'e').count(); assertEquals(2, count); long count2 = someString.codePoints().filter(ch -> ch == 'e').count(); assertEquals(2, count2);

Jadi, ini jelas merupakan solusi yang lebih bersih dan lebih mudah dibaca menggunakan pustaka inti.

3. Menggunakan Perpustakaan Eksternal

Sekarang mari kita lihat beberapa solusi yang menggunakan utilitas dari pustaka eksternal.

3.1. Menggunakan StringUtils

Secara umum, selalu lebih baik menggunakan solusi yang ada daripada menciptakan solusi kita sendiri. Kelas commons.lang.StringUtils memberi kita metode countMatches () , yang bisa digunakan untuk menghitung karakter atau bahkan sub-string dalam String yang diberikan .

Pertama, kita perlu memasukkan ketergantungan yang sesuai:

 org.apache.commons commons-lang3 3.5 

Kami dapat menemukan versi terbaru di Maven Central.

Sekarang mari kita gunakan countMatches () untuk menghitung jumlah karakter 'e' dalam literal String "gajah":

int count = StringUtils.countMatches("elephant", "e"); assertEquals(2, count);

3.2. Menggunakan Jambu Biji

Jambu biji juga bisa membantu dalam menghitung karakter. Kita perlu mendefinisikan ketergantungan:

 com.google.guava guava 21.0 

Kami dapat menemukan versi terbaru di Maven Central.

Mari kita lihat bagaimana Jambu biji dapat dengan cepat membantu kita menghitung karakter:

int count = CharMatcher.is('e').countIn("elephant"); assertEquals(2, count);

3.3. Menggunakan Spring

Secara alami menambahkan Kerangka Musim Semi ke dalam proyek Anda hanya untuk menghitung karakter tidak masuk akal. Namun, jika kita sudah memilikinya di proyek kita, kita hanya perlu menggunakan metode countOccurencesOf () :

int count = StringUtils.countOccurrencesOf("elephant", "e"); assertEquals(2, count);

4. Kesimpulan

Dalam tutorial singkat ini, kami fokus pada berbagai cara untuk menghitung karakter dalam String. Beberapa di antaranya dirancang murni di Jawa; beberapa perpustakaan tambahan membutuhkan.

Rekomendasi kami adalah menggunakan utilitas yang sudah ada dari StringUtils , Guava atau Spring. Namun, jika seseorang lebih suka menggunakan Java biasa saja, artikel ini menawarkan beberapa kemungkinan untuk mencapai hasil yang baik dengan Java 8.

Kode sumber lengkap untuk contoh-contoh ini tersedia dalam proyek GitHub ini.