Panggilan akan Character.isLetter(c)
kembali true
jika karakternya adalah huruf. Tetapi adakah cara untuk mengetahui dengan cepat jika a String
hanya berisi karakter dasar ASCII?
sumber
Panggilan akan Character.isLetter(c)
kembali true
jika karakternya adalah huruf. Tetapi adakah cara untuk mengetahui dengan cepat jika a String
hanya berisi karakter dasar ASCII?
Mulai Guava 19.0 dan seterusnya, Anda dapat menggunakan:
boolean isAscii = CharMatcher.ascii().matchesAllOf(someString);
Ini menggunakan matchesAllOf(someString)
metode yang bergantung pada metode pabrik ascii()
daripada ASCII
singleton yang sekarang tidak digunakan lagi .
Di sini ASCII menyertakan semua karakter ASCII termasuk karakter yang tidak dapat dicetak lebih rendah dari 0x20
(spasi) seperti tab, line-feed / return tetapi juga BEL
dengan kode 0x07
dan DEL
dengan kode 0x7F
.
Kode ini salah menggunakan karakter daripada poin kode, meskipun poin kode ditunjukkan dalam komentar versi sebelumnya. Untungnya, karakter yang diperlukan untuk membuat titik kode dengan nilai lebih dari U+010000
atau menggunakan dua karakter pengganti dengan nilai di luar rentang ASCII. Jadi metode ini masih berhasil menguji ASCII, bahkan untuk string yang berisi emoji.
Untuk versi Guava sebelumnya tanpa ascii()
metode, Anda dapat menulis:
boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);
CharMatcher.ASCII
sudah usang sekarang dan akan dihapus pada Juni 2018.Anda dapat melakukannya dengan java.nio.charset.Charset .
Mendeteksi karakter non-ASCII dalam String
sumber
StandardCharsets.US_ASCII
sebagai penggantiCharset.forName("US-ASCII")
.StandardCharsets
? Saya dapat memposting jawaban lain tetapi saya lebih suka memperbaiki jawaban yang sangat dihargai ini.Berikut adalah cara lain untuk tidak bergantung pada pustaka tetapi menggunakan regex.
Anda dapat menggunakan satu baris ini:
Seluruh program contoh:
sumber
\P{Print}
dan\P{Graph}
+ deskripsi? Mengapa Anda membutuhkan\A
dan\z
?Iterasi melalui string dan pastikan semua karakter memiliki nilai kurang dari 128.
String Java secara konseptual dikodekan sebagai UTF-16. Dalam UTF-16, kumpulan karakter ASCII dikodekan sebagai nilai 0 - 127 dan pengkodean untuk setiap karakter non ASCII (yang mungkin terdiri dari lebih dari satu karakter Java) dijamin tidak menyertakan angka 0 - 127
sumber
str.chars().allMatch(c -> c < 128)
c >= 0x20 && c < 0x7F
32 nilai pertama dari pengkodean 7 bit adalah karakter kontrol dan nilai akhir (0x7F) adalahDEL
.Atau Anda menyalin kode dari kelas IDN .
sumber
return false
daripada menggunakanisASCII = false
danbreak
.commons-lang3 dari Apache berisi metode utilitas / kenyamanan yang berharga untuk semua jenis 'masalah', termasuk yang ini.
sumber
coba ini:
sumber
Iterasi melalui string, dan gunakan charAt () untuk mendapatkan karakter. Kemudian perlakukan itu sebagai int, dan lihat apakah itu memiliki nilai unicode (superset dari ASCII) yang Anda suka.
Istirahat dulu yang tidak Anda sukai.
sumber
sumber
charAt
mengembalikan achar
. Dapatkah Anda langsung menguji jika suatu tipechar
lebih besar dari int tanpa mengonversi ke int, pertama, atau apakah pengujian Anda secara otomatis melakukan penutup? Mungkin Anda bisa dan mungkin bisa? Aku pergi ke depan dan dikonversi ini ke int seperti:if ((int)s.charAt(i) > 127)
. Tidak yakin apakah hasil saya berbeda tetapi saya merasa lebih baik untuk membiarkannya berjalan. Kita akan lihat: - \Itu mungkin saja. Masalah yang lumayan.
sumber
Ini akan mengembalikan nilai true jika String hanya berisi karakter ASCII dan false jika tidak
Jika Anda ingin menghapus non ASCII, berikut cuplikannya:
sumber
sumber