Saya ingin memeriksa bahwa Java String atau array karakter tidak hanya terdiri dari spasi putih, menggunakan Java?
Ini adalah pertanyaan yang sangat mirip kecuali Javascript:
Bagaimana saya bisa memeriksa apakah string berisi karakter & spasi, bukan hanya spasi?
EDIT : Saya menghapus sedikit tentang karakter alfanumerik, jadi lebih masuk akal.
java
string
whitespace
Ankur
sumber
sumber
String.isBlank
API untuk hal yang sama.Jawaban:
Solusi terpendek yang dapat saya pikirkan:
Ini hanya memeriksa ruang putih (non). Jika Anda ingin memeriksa kelas karakter tertentu, Anda harus menggunakan perkasa
match()
dengan regexp seperti:... yang memeriksa setidaknya satu karakter alfanumerik (ASCII).
sumber
matches()
: untuk kinerja, saya biasanya menyimpanPattern
di afinal static
. Membayar jika kode yang sama sering berjalan.null
bukan string!"Saya akan menggunakan perpustakaan Apache Commons Lang. Ini memiliki kelas yang disebut StringUtils yang berguna untuk semua jenis operasi String. Untuk memeriksa apakah suatu String tidak semua spasi putih, Anda dapat menggunakan yang berikut ini:
Berikut ini rujukannya: StringUtils.isBlank
sumber
StringUtils.isEmpty
sekarang akan mengembalikan false jika Anda "" masuk.Sedikit lebih pendek dari apa yang disebutkan oleh Carl Smotricz:
sumber
https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/StringUtils.html#isBlank-java.lang.CharSequence-
sumber
Jika Anda menggunakan Java 11 ,
isBlank
metode string baru akan berguna:Jika Anda menggunakan Java 8, 9 atau 10 , Anda bisa membangun aliran sederhana untuk memeriksa bahwa string bukan hanya spasi kosong:
Selain tidak memerlukan pustaka pihak ketiga seperti Apache Commons Lang, solusi ini memiliki keuntungan menangani karakter spasi putih, dan tidak hanya
' '
ruang kosong sepertitrim
solusi berbasis yang disarankan dalam banyak jawaban lain. Anda dapat merujuk ke Javadocs untuk daftar lengkap semua jenis ruang putih yang didukung. Perhatikan bahwa string kosong juga tercakup dalam kedua kasus.sumber
Perhatikan penggunaan back-slash cap-S, yang berarti "char non-whitespace"
Saya berani bertaruh ini adalah solusi paling sederhana (dan mungkin yang tercepat?).
sumber
String year="1995"; year.matches("\\S"); will return false
Jadi ini bukan solusi yang tepat. : |Jawaban ini lebih berfokus pada sidenote " yaitu memiliki setidaknya satu karakter alfanumerik ". Selain itu, itu tidak menambahkan terlalu banyak ke solusi (sebelumnya) yang lain, kecuali bahwa itu tidak menyakiti Anda dengan NPE jika String
null
.Kami ingin
false
jika (1) s adalahnull
atau (2) s kosong atau (3) hanya berisi whitechars.sumber
Jika Anda hanya memeriksa spasi putih dan tidak peduli dengan null maka Anda dapat menggunakan org.apache.commons.lang.StringUtils.isWhitespace (String str),
StringUtils.isWhitespace(String str);
(Memeriksa apakah String hanya berisi spasi putih.)
Jika Anda juga ingin memeriksa null (termasuk spasi) maka
sumber
Dengan Java-11 +, Anda dapat menggunakan
String.isBlank
API untuk memeriksa apakah string yang diberikan tidak semuanya terdiri dari spasi putih -Javadoc untuk hal yang sama adalah:
sumber
Metode langsing akan bekerja bagus untuk Anda.
http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/lang/String.html#trim ()
Anda bisa memotong dan kemudian membandingkannya dengan string kosong atau mungkin memeriksa panjangnya 0.
sumber
Alternatif:
sumber
trim () dan ekspresi reguler yang disebutkan lainnya tidak berfungsi untuk semua jenis spasi putih
yaitu: Karakter Unicode 'LINE SEPARATOR' http://www.fileformat.info/info/unicode/char/2028/index.htm
Fungsi Java Character.isWhitespace () mencakup semua situasi.
Itu sebabnya solusi yang sudah disebutkan StringUtils.isWhitespace (String) / atau StringUtils.isBlank (String) harus digunakan.
sumber
akan memeriksa: - apakah itu nol - apakah hanya ruang - apakah itu string kosong ""
https://www.programcreek.com/java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly Only
sumber
Hanya perbandingan kinerja pada openjdk 13, Windows 10. Untuk masing-masing teks berikut:
dieksekusi salah satu dari tes berikut:
masing-masing 10.000.000 kali.
Hasil:
Cukup mengejutkan trim + kosong adalah yang tercepat. Bahkan jika perlu membangun teks yang dipangkas. Masih lebih cepat dari loop sederhana, mencari satu karakter non-spasi putih ...
EDIT: Semakin panjang teks, semakin banyak angka yang berbeda. Trim teks panjang membutuhkan waktu lebih lama daripada hanya loop sederhana. Namun, regex masih merupakan solusi paling lambat.
sumber
Meskipun secara pribadi saya lebih suka
!str.isBlank()
, seperti yang telah disarankan orang lain (ataustr -> !str.isBlank()
sebagai Predikat), versi yang lebih modern dan efisien daristr.trim()
pendekatan yang disebutkan di atas, akan menggunakanstr.strip()
- menganggap nulls sebagai "spasi putih":Misalnya sebagai Predikat, untuk digunakan dengan stream, misalnya dalam uji unit:
sumber