Tukarkan Huruf ke Huruf Kes

1. Pengenalan

Dalam tutorial ringkas ini, kami akan menunjukkan cara menukar format huruf String ke judul di Java.

Kami akan menunjukkan cara yang berbeza untuk melaksanakan kaedah khusus dan kami juga akan menunjukkan cara melakukannya menggunakan perpustakaan pihak ketiga.

2. Penyelesaian Java Teras

2.1. Pengulangan Melalui Watak Rentetan

Salah satu cara untuk menukar huruf String ke judul adalah dengan melakukan iterasi melalui semua watak String .

Untuk melakukannya, apabila kita menjumpai pemisah kata, kita memanfaatkan huruf seterusnya. Selepas itu, kita mengubah watak-watak yang lain menjadi huruf kecil sehingga kita mencapai pemisah kata seterusnya.

Mari gunakan ruang putih sebagai pemisah kata dan laksanakan penyelesaian ini:

public static String convertToTitleCaseIteratingChars(String text) { if (text == null || text.isEmpty()) { return text; } StringBuilder converted = new StringBuilder(); boolean convertNext = true; for (char ch : text.toCharArray()) { if (Character.isSpaceChar(ch)) { convertNext = true; } else if (convertNext) { ch = Character.toTitleCase(ch); convertNext = false; } else { ch = Character.toLowerCase(ch); } converted.append(ch); } return converted.toString(); }

Seperti yang kita lihat, kita menggunakan kaedah Character.toTitleCase untuk melakukan penukaran, kerana ia memeriksa kes tajuk yang setara dengan Karakter di Unicode.

Sekiranya kita menguji kaedah ini menggunakan input berikut:

tHis IS a tiTLe tHis, IS a tiTLe

Kami mendapat hasil yang diharapkan berikut:

This Is A Title This, Is A Title

2.2. Membahagi Kepada Perkataan

Pendekatan lain untuk melakukan ini adalah dengan memisahkan String menjadi kata-kata, mengubah setiap kata menjadi huruf besar, dan akhirnya menggabungkan semua kata lagi menggunakan pemisah kata yang sama.

Mari kita lihat dalam kod, gunakan lagi ruang putih sebagai pemisah kata, dan API Aliran yang berguna :

private static final String WORD_SEPARATOR = " "; public static String convertToTitleCaseSplitting(String text) { if (text == null || text.isEmpty()) { return text; } return Arrays .stream(text.split(WORD_SEPARATOR)) .map(word -> word.isEmpty() ? word : Character.toTitleCase(word.charAt(0)) + word .substring(1) .toLowerCase()) .collect(Collectors.joining(WORD_SEPARATOR)); }

Dengan menggunakan input yang sama seperti sebelumnya, kami mendapat output yang sama:

This Is A Title This, Is A Title

3. Menggunakan Apache Commons

Sekiranya kita tidak ingin menerapkan metode khusus kita sendiri, kita dapat menggunakan perpustakaan Apache Commons. Persediaan untuk perpustakaan ini dijelaskan dalam artikel ini.

Ini menyediakan yang WordUtils kelas, yang mempunyai capitalizeFully () kaedah yang tidak betul-betul apa yang kita mahu untuk mencapai:

public static String convertToTileCaseWordUtilsFull(String text) { return WordUtils.capitalizeFully(text); }

Seperti yang kita lihat, ini sangat mudah digunakan dan jika kita mengujinya dengan input yang sama seperti sebelumnya kita mendapat hasil yang sama:

This Is A Title This, Is A Title

Juga, kelas WordUtils menyediakan kaedah kapitalisasi lain () yang berfungsi sama dengan huruf besarFully (), kecuali ia hanya mengubah watak pertama setiap perkataan . Ini bermaksud bahawa ia tidak mengubah watak-watak yang lain menjadi huruf kecil.

Mari lihat bagaimana kita boleh menggunakan ini:

public static String convertToTileCaseWordUtils(String text) { return WordUtils.capitalize(text); }

Sekarang, jika kita mengujinya dengan input yang sama seperti sebelumnya kita mendapat output yang berbeza ini:

THis IS A TiTLe THis, IS A TiTLe

4. Menggunakan ICU4J

Perpustakaan lain yang dapat kita gunakan adalah ICU4J, yang memberikan sokongan Unicode dan globalisasi.

Untuk menggunakannya, kita perlu menambahkan kebergantungan ini pada projek kita:

 com.ibm.icu icu4j 61.1 

Versi terbaru boleh didapati di sini.

Perpustakaan ini berfungsi dengan cara yang sangat mirip dengan WordUtils , tetapi kita dapat menentukan BreakIterator untuk memberitahu kaedah bagaimana kita ingin membelah String , dan oleh itu kata-kata apa yang ingin kita ubah menjadi judul:

public static String convertToTitleCaseIcu4j(String text) { if (text == null || text.isEmpty()) { return text; } return UCharacter.toTitleCase(text, BreakIterator.getTitleInstance()); }

Seperti yang kita lihat, mereka mempunyai BreakIterator khusus untuk bekerja dengan tajuk. Sekiranya kita tidak menentukan BreakIterator, ia menggunakan lalai dari Unicode , yang dalam kes ini menghasilkan hasil yang sama.

Juga, notis bahawa kaedah ini membolehkan kita menentukan Locale daripada String kami akan menukarkan untuk melakukan penukaran khusus tempat.

5. Kesimpulan

Dalam artikel ringkas ini, kami telah menunjukkan cara mengubah format huruf String menjadi judul di Java. Kami telah menggunakan implementasi khusus kami terlebih dahulu, dan setelah itu, kami telah menunjukkan cara melakukannya dengan menggunakan perpustakaan luaran.

Seperti biasa, kod sumber penuh contoh terdapat di GitHub.