Saya ingin melakukan beberapa tindakan HANYA JIKA string saya memiliki nilai yang bermakna. Jadi, saya mencoba ini.
if (!myString.equals("")) {
doSomething
}
dan ini
if (!myString.equals(null)) {
doSomething
}
dan ini
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
dan ini
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
dan ini
if ( myString.length()>0) {
doSomething
}
Dan dalam semua kasus, program saya doSomething
terlepas dari fakta bahwa string saya KOSONG. Itu sama dengan null
. Jadi, apa yang salah dengan itu?
TAMBAH:
Saya menemukan alasan masalahnya. Variabel dinyatakan sebagai string dan, sebagai konsekuensinya, null
ditugaskan untuk variabel ini ditransformasikan menjadi "null"
! Jadi, if (!myString.equals("null"))
berhasil.
null
tidak memiliki metode, juga tidakequals()
. JikamyString
tidaknull
, bagaimana Anda pernah memanggil metode pada itu? :)System.out.println(myString)
segera sebelum if-block agar Anda dapat melihat apa yang ada di sana?null
"?null
ditugaskan untuk variabel ini ditransformasikan ke"null"
- ini adalah ide yang mengerikan. Cobalah untuk mengubah desain ini jika memungkinkan.Jawaban:
Sebagai komentar lebih lanjut, Anda harus mengetahui istilah ini dalam
equals
kontrak:Dari
Object.equals(Object)
:Cara untuk membandingkan dengan
null
menggunakanx == null
danx != null
.Apalagi,
x.field
danx.method()
melemparNullPointerException
jikax == null
.sumber
s.isEmpty()
bukans.length() == 0
untuk keterbacaan. Perbedaan kinerja dapat diabaikan. Saya setuju itus.equals("")
mengerikan.Jika
myString
adalahnull
, kemudian memanggilmyString.equals(null)
ataumyString.equals("")
akan gagal denganNullPointerException
. Anda tidak dapat memanggil metode instance apa pun pada variabel nol.Periksa null terlebih dahulu seperti ini:
Ini menggunakan evaluasi hubung singkat untuk tidak mencoba
.equals
jikamyString
gagal pemeriksaan nol.sumber
.isEmpty()
bukan.equals("")
.myString.isEmpty()
. Tetapi pada level ini, keterbacaan mengalahkan optimisasi, dan orang mungkin lebih terbiasa membacamyString.equals("")
. (Atau mungkin juga tidak.)Apache commons
StringUtils.isNotEmpty
adalah cara terbaik untuk melakukannya.sumber
Jika myString sebenarnya nol, maka setiap panggilan ke referensi akan gagal dengan Null Pointer Exception (NPE). Sejak java 6, gunakan #isEmpty alih-alih panjang cek (dalam hal apapun JANGAN PERNAH membuat String kosong baru dengan centang).
Kebetulan jika membandingkan dengan String literal seperti yang Anda lakukan, akan membalikkan pernyataan agar tidak harus memiliki cek nol, yaitu,
dari pada :
sumber
BEKERJA !!!!
sumber
Anda perlu memeriksa bahwa
myString
objeknya adalahnull
:sumber
Jika string Anda nol, panggilan seperti ini akan menghasilkan NullReferenceException:
myString.equals (null)
Tapi bagaimanapun, saya pikir metode seperti ini yang Anda inginkan:
Kemudian dalam kode Anda, Anda dapat melakukan hal-hal seperti ini:
sumber
Saya akan mendorong menggunakan utilitas yang ada, atau membuat metode Anda sendiri:
Kemudian gunakan saja saat Anda membutuhkannya:
Seperti disebutkan di atas, || dan && operator hubungan pendek. Itu berarti segera setelah mereka dapat menentukan nilai mereka berhenti. Jadi jika (string == null) benar, bagian panjang tidak perlu dievaluasi, karena ekspresi selalu benar. Demikian juga dengan &&, di mana jika sisi kiri salah, ekspresi selalu salah dan tidak perlu dievaluasi lebih lanjut.
Sebagai catatan tambahan, menggunakan panjang umumnya merupakan ide yang lebih baik daripada menggunakan .equals. Performanya sedikit lebih baik (tidak banyak), dan tidak memerlukan pembuatan objek (walaupun kebanyakan kompiler mungkin mengoptimalkan ini).
sumber
Mencoba,
sumber
Kebetulan, jika Anda melakukan banyak manipulasi string, ada kelas Spring yang hebat dengan segala macam metode yang berguna:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
sumber
Setiap kali saya harus berurusan dengan string (hampir setiap waktu) saya berhenti dan bertanya-tanya di mana sebenarnya cara tercepat untuk memeriksa string kosong. Tentu saja string.Length == 0 centang harus menjadi yang tercepat karena Panjang adalah properti dan tidak boleh ada pemrosesan selain mengambil nilai properti. Tapi kemudian saya bertanya pada diri sendiri, mengapa ada String. Seharusnya lebih cepat memeriksa String. Jauh dari panjang, kataku pada diri sendiri. Yah aku akhirnya memutuskan untuk mengujinya. Saya membuat kode aplikasi Konsol Windows kecil yang memberi tahu saya berapa lama waktu yang dibutuhkan untuk melakukan pemeriksaan tertentu untuk 10 juta replikasi. Saya memeriksa 3 string berbeda: string NULL, string Kosong, dan string "". Saya menggunakan 5 metode berbeda: String.IsNullOrEmpty (), str == null, str == null || str == String.Empty, str == null || str == "", str == null || str.
Menurut hasil ini, pemeriksaan rata-rata
str == null
adalah yang tercepat, tetapi mungkin tidak selalu menghasilkan apa yang kami cari.if str = String.Empty
ataustr = ""
, itu menghasilkan false. Maka Anda memiliki 2 yang terikat di tempat kedua:String.IsNullOrEmpty()
danstr == null || str.length == 0
. KarenaString.IsNullOrEmpty()
terlihat lebih bagus dan lebih mudah (dan lebih cepat) untuk menulis, saya akan merekomendasikan menggunakannya daripada solusi lain.sumber
Saya akan melakukan sesuatu seperti ini:
sumber
Saya telah menggunakan
StringUtil.isBlank(string)
Ini menguji apakah string kosong: null, emtpy, atau hanya spasi putih.
Jadi yang ini adalah yang terbaik sejauh ini
Berikut adalah metode orignal dari dokumen
sumber
Ini seharusnya bekerja:
Jika tidak, maka myString kemungkinan memiliki nilai yang tidak Anda harapkan. Coba cetak seperti ini:
Menggunakan simbol '+' untuk mengelilingi string akan menunjukkan kepada Anda jika ada spasi kosong di sana yang tidak Anda perhitungkan.
sumber
if(str.isEmpty() || str==null){ do whatever you want }
sumber
Oke ini adalah cara kerja tipe data di Jawa. (Anda harus memaafkan bahasa Inggris saya, saya mungkin tidak menggunakan kosakata yang tepat. Anda harus membedakan keduanya. Jenis data dasar dan tipe data normal. Tipe data dasar cukup banyak membentuk semua yang ada. Misalnya, ada semua angka, char, boolean, dll. Tipe data normal atau tipe data kompleks adalah yang lainnya. String adalah array karakter, oleh karena itu tipe data kompleks.
Setiap variabel yang Anda buat sebenarnya adalah penunjuk pada nilai di memori Anda. Sebagai contoh:
variabel "s" TIDAK mengandung String. Itu adalah sebuah pointer. Pointer ini menunjuk pada variabel di memori Anda. Ketika Anda menelepon
System.out.println(anyObject)
,toString()
metode objek itu disebut. Jika tidak menimpatoString
dari Object, itu akan mencetak pointer. Sebagai contoh:Segala sesuatu di belakang "@" adalah penunjuk. Ini hanya berfungsi untuk tipe data yang kompleks. Tipe data primitif secara LANGSUNG disimpan dalam penunjuknya. Jadi sebenarnya tidak ada pointer dan nilainya disimpan secara langsung.
Sebagai contoh:
saya TIDAK menyimpan pointer dalam hal ini. saya akan menyimpan nilai integer 123 (dalam byte ofc).
Oke jadi ayo kembali ke
==
operator. Itu selalu membandingkan pointer dan bukan konten yang disimpan pada posisi pointer di memori.Contoh:
String kedua ini memiliki pointer yang berbeda. Namun String.equals (String other) membandingkan konten. Anda dapat membandingkan tipe data primitif dengan operator '==' karena pointer dari dua objek berbeda dengan konten yang sama adalah sama.
Null akan berarti bahwa pointernya kosong. Tipe data primitif kosong secara default adalah 0 (untuk angka). Null untuk objek kompleks bagaimanapun berarti, objek itu tidak ada.
Salam pembuka
sumber
Bagi saya pemeriksaan terbaik jika string memiliki konten yang bermakna di Jawa adalah yang ini:
Pertama Anda memeriksa apakah string
null
harus dihindariNullPointerException
dan kemudian Anda memotong semua karakter spasi untuk menghindari memeriksa string yang hanya memiliki spasi putih dan akhirnya Anda memeriksa apakah string yang dipangkas tidak kosong, yaitu memiliki panjang 0.sumber
Saya punya masalah ini di android dan saya menggunakan cara ini (Bekerja untuk saya):
Tetapi dalam kode java saya menggunakan:
Dan:
sumber
Saya lebih suka menggunakan:
Baca StringUtils.isBlank () vs String.isEmpty () .
sumber
Di Android Anda dapat memeriksa ini dengan metode utilitas
isEmpty
dariTextUtils
,isEmpty(CharSequence str)
Metode memeriksa kedua kondisi, untuknull
dan panjang.sumber
Saya selalu menggunakan seperti ini:
atau Anda dapat menyalin ini ke proyek Anda:
dan sebut saja seperti:
itu akan mengembalikan true jika kosong atau nol.
b=true
jika kosong atau nolatau Anda dapat menggunakan coba tangkap dan tangkap saat itu nol.
sumber
Saya pikir myString bukan string tetapi array string. Inilah yang perlu Anda lakukan:
sumber
Anda dapat memeriksa string sama dengan nol menggunakan ini:
Jika hasilnya 0 maka (Uji + "") = "null".
sumber
Saya mencoba sebagian besar contoh yang diberikan di atas untuk sebuah null di aplikasi android yang sedang saya bangun dan semuanya gagal. Jadi saya datang dengan solusi yang bekerja kapan saja untuk saya.
Jadi cukup gabungkan string kosong seperti yang saya lakukan di atas dan uji terhadap "null" dan itu berfungsi dengan baik. Bahkan tidak terkecuali dilempar
sumber
Pengecualian juga dapat membantu:
sumber
Jika Anda bekerja di Android maka Anda dapat menggunakan kelas TextUtils sederhana. Periksa kode berikut:
Ini adalah penggunaan kode yang sederhana. Jawaban bisa diulang. Tetapi sederhana untuk memiliki cek tunggal dan sederhana untuk Anda.
sumber
Anda harus memeriksa dengan nol
if(str != null).
sumber