Saya membuat program Java untuk membandingkan dua string:
String s1 = "Hello";
String s2 = "hello";
if (s1.equals(s2)) {
System.out.println("hai");
} else {
System.out.println("welcome");
}
Ini menampilkan "selamat datang". Saya mengerti ini peka huruf besar / kecil. Tapi masalah saya adalah saya ingin membandingkan dua string tanpa sensitivitas huruf. Yaitu saya mengharapkan hasilnya hai
.
java
string
comparison
case-insensitive
pengguna268018
sumber
sumber
s1.equalsIgnoreCase(s2)
Anda mungkin gagal melakukannya di mana pun itu perlu dilakukan. Saya menyarankan agar Anda menemukan dari mana string itu berasal - file atau database atau mungkin input pengguna - dan ubah menjadi huruf besar (atau huruf kecil) dan terus menggunakan .equals untuk perbandingan.equalsIgnoreCase
pendekatan yang diterima . Baca masalah Turki I dan masalah Unicode serupa untuk alasannya.equalsIgnoreCase
mengembalikan nilai yang salah untuk bahasa Turki, karena mengembalikan nilai true untuk membandingkan "i" dan "I", meskipun seharusnya mengembalikan false. Jadi saya curiga jika Anda ingin mempertimbangkan lokal,Collator
sebenarnya cara yang harus dilakukan.toLowerCase
/toUpperCase
pada seluruh string dan melakukannya per karakter memberikan dua hasil yang berbeda juga.Jawaban:
s1.equalsIgnoreCase(s2)
: (lihat javadoc )s1.equals(s2)
sumber
Gunakan
String.equalsIgnoreCase()
.Gunakan referensi Java API untuk menemukan jawaban seperti ini:
https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)
https://docs.oracle.com/javase/1.5.0/docs/api/
sumber
String.equalsIgnoreCase
adalah pilihan paling praktis untuk perbandingan string tidak peka huruf besar / kecil.Namun, perlu diketahui bahwa metode ini tidak melakukan pelipatan atau dekomposisi kasus penuh sehingga tidak dapat melakukan pencocokan tanpa casing seperti yang ditentukan dalam standar Unicode. Faktanya, JDK API tidak menyediakan akses ke informasi tentang data karakter lipat kasus, jadi tugas ini paling baik didelegasikan ke pustaka pihak ketiga yang telah dicoba dan diuji.
Library tersebut adalah ICU , dan berikut adalah cara seseorang dapat mengimplementasikan utilitas untuk perbandingan string tidak peka huruf besar / kecil:
Perbandingan yang naif dengan
String.equalsIgnoreCase
, atauString.equals
pada string dengan huruf besar atau kecil akan gagal bahkan dalam pengujian sederhana ini.(Namun perlu diperhatikan bahwa citarasa pelipat kasing yang telah ditentukan sebelumnya
getNFKCCasefoldInstance
tidak tergantung pada lokasi; untuk lokal Turki,UCharacter.foldCase
mungkin diperlukan lebih banyak pekerjaan yang melibatkan .)sumber
Anda harus menggunakan
compareToIgnoreCase
metodeString
objek.if (compareValue == 0)
itu artinyastr1
samastr2
.sumber
Sekarang akan menampilkan:
hai
sumber
Di API Java default Anda memiliki:
Jadi, Anda tidak perlu menulis ulang pembanding jika akan menggunakan string dengan struktur data yang Diurutkan.
Apakah yang Anda inginkan untuk pemeriksaan kesetaraan murni dalam kode Anda sendiri.
Sekedar informasi lebih lanjut tentang apa saja yang berhubungan dengan persamaan String di Jawa. Fungsi hashCode () dari kelas java.lang.String "peka huruf besar kecil":
Jadi, jika Anda ingin menggunakan Hashtable / HashMap dengan Strings sebagai kunci, dan memiliki kunci seperti "SomeKey", "SOMEKEY" dan "somekey" dianggap sama, maka Anda harus membungkus string di kelas lain (Anda tidak dapat memperluas String karena ini adalah kelas terakhir). Sebagai contoh :
dan kemudian gunakan seperti itu:
sumber
Perhatikan bahwa Anda mungkin ingin melakukan pemeriksaan null pada mereka juga sebelum melakukan .equals atau .equalsIgnoreCase.
Objek String null tidak dapat memanggil metode sama dengan.
yaitu:
sumber
if (str1 == null || str2 == null) return false;
.if (str1 == str2) return true;
yang melayani null dan juga pintasan kasus di mana dua referensi string merujuk ke objek string yang sama.Gunakan
s1.equalsIgnoreCase(s2)
: https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String) .sumber
Anda dapat menggunakan equalsIgnoreCase
sumber
Lebih lanjut tentang string dapat ditemukan di Kelas String dan Tutorial String
sumber
Untuk menjadi nullsafe, Anda dapat menggunakan
atau
sumber
sumber