Judulnya cukup banyak mengatakan itu semua. Apa cara paling sederhana / paling elegan yang dapat saya konversi, di Jawa, string dari format "THIS_IS_AN_EXAMPLE_STRING"
ke format " ThisIsAnExampleString
"? Saya pikir pasti ada setidaknya satu cara untuk melakukannya menggunakan String.replaceAll()
dan regex.
Pikiran awal saya adalah: menambahkan string dengan garis bawah ( _
), mengonversi seluruh string menjadi huruf kecil, dan kemudian gunakan replaceAll untuk mengonversi setiap karakter yang diawali dengan garis bawah dengan versi huruf besarnya.
Jawaban:
Pilihan lain adalah menggunakan Google Guava's
com.google.common.base.CaseFormat
George Hawkins meninggalkan komentar dengan contoh penggunaan ini:
sumber
Lihatlah WordUtils di perpustakaan lang Apache Commons :
Secara khusus, metode capitalizeFully (String str, char []) harus melakukan pekerjaan:
Bar hijau!
sumber
Catatan : Anda perlu menambahkan validasi argumen.
sumber
String result = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "THIS_IS_AN_EXAMPLE_STRING");
. Lihat com.google.common.base.CaseFormat javadoc .Dengan Apache Commons Lang3 lib sangat mudah.
Contoh:
Memberi:
sumber
sumber
Berikut ini cuplikan kode yang mungkin membantu:
sumber
Java 1.8 contohnya menggunakan Streams
THIS_IS_SOME_TEXT sekarang thisIsSomeText
sumber
text.matches( "([a-z]+[a-zA-Z0-9]+)+" )
sebelum unta casing mungkin merupakan solusi yang masuk akal untuk masalah casing rendah.Tidak yakin, tapi saya pikir saya bisa menggunakan lebih sedikit memori dan mendapatkan kinerja yang dapat diandalkan dengan melakukannya char-by-char. Saya melakukan sesuatu yang serupa, tetapi di loop di utas latar belakang, jadi saya mencoba ini untuk saat ini. Saya sudah memiliki pengalaman dengan String.split menjadi lebih mahal dari yang diharapkan. Dan saya sedang bekerja di Android dan berharap cegukan GC lebih menjadi masalah daripada penggunaan cpu.
Petunjuk bahwa String.split mahal adalah inputnya adalah regex (bukan char seperti String.indexOf) dan mengembalikan array (alih-alih mengatakan iterator karena loop hanya menggunakan satu hal pada satu waktu). Ditambah kasus seperti "AB_AB_AB_AB_AB_AB ..." memecah efisiensi dari salinan massal, dan untuk string panjang menggunakan urutan besarnya lebih banyak memori daripada string input.
Sedangkan perulangan melalui karakter tidak memiliki kasus kanonik. Jadi bagi saya overhead dari regex dan array yang tidak dibutuhkan tampaknya umumnya kurang disukai (kemudian memberikan efisiensi salinan massal). Tertarik untuk mendengar pendapat / koreksi, terima kasih.
sumber
Waktu: dalam mili detik.
sumber
Anda dapat menggunakan org.modeshape.common.text.Inflector .
Secara khusus:
Artefak Maven adalah: org.modeshape: modeshape-common: 2.3.0.Final
pada repositori JBoss: https://repository.jboss.org/nexus/content/repositories/releases
Ini file JAR: https://repository.jboss.org/nexus/content/repositories/releases/org/modeshape/modeshape-common/2.3.0.Final/modeshape-common-2.3.0.Final.jar
sumber
Anda dapat Coba ini juga:
sumber
sumber
Ini adalah Program Sederhana untuk dikonversi ke CamelCase. berharap ini Akan Membantu Anda ..
sumber
Ini akan dikonversi
Enum Constant
menjadi Camel Case. Akan sangat membantu bagi siapa saja yang mencari kesungguhan itu.sumber
Satu lagi solusi untuk ini adalah sebagai berikut.
sumber
Doa sebagai
Waktu Eksekusi: 14 ms
sumber
Sebuah snnipet sederhana:
sumber
Java 8 untuk beberapa string:
sumber
sumber
CaseFormat
bukan API standar. Jawaban rangkap jika itu jambu biji.