Anda tidak dapat menggunakan \s
di Java untuk mencocokkan spasi putih pada kumpulan karakter aslinya sendiri, karena Java tidak mendukung properti spasi kosong Unicode - meskipun hal itu benar-benar diperlukan untuk memenuhi RL1.2 UTS # 18! Apa yang dimilikinya tidak sesuai standar, sayangnya.
Unicode mendefinisikan 26 poin kode sebagai \p{White_Space}
: 20 di antaranya adalah berbagai macam \pZ
GeneralCategory = Separator , dan 6 sisanya adalah \p{Cc}
GeneralCategory = Control .
Ruang putih adalah properti yang cukup stabil, dan yang sama telah ada hampir selamanya. Meski begitu, Java tidak memiliki properti yang sesuai dengan The Unicode Standard untuk ini, jadi Anda harus menggunakan kode seperti ini:
String whitespace_chars = "" /* dummy empty string for homogeneity */
+ "\\u0009" // CHARACTER TABULATION
+ "\\u000A" // LINE FEED (LF)
+ "\\u000B" // LINE TABULATION
+ "\\u000C" // FORM FEED (FF)
+ "\\u000D" // CARRIAGE RETURN (CR)
+ "\\u0020" // SPACE
+ "\\u0085" // NEXT LINE (NEL)
+ "\\u00A0" // NO-BREAK SPACE
+ "\\u1680" // OGHAM SPACE MARK
+ "\\u180E" // MONGOLIAN VOWEL SEPARATOR
+ "\\u2000" // EN QUAD
+ "\\u2001" // EM QUAD
+ "\\u2002" // EN SPACE
+ "\\u2003" // EM SPACE
+ "\\u2004" // THREE-PER-EM SPACE
+ "\\u2005" // FOUR-PER-EM SPACE
+ "\\u2006" // SIX-PER-EM SPACE
+ "\\u2007" // FIGURE SPACE
+ "\\u2008" // PUNCTUATION SPACE
+ "\\u2009" // THIN SPACE
+ "\\u200A" // HAIR SPACE
+ "\\u2028" // LINE SEPARATOR
+ "\\u2029" // PARAGRAPH SEPARATOR
+ "\\u202F" // NARROW NO-BREAK SPACE
+ "\\u205F" // MEDIUM MATHEMATICAL SPACE
+ "\\u3000" // IDEOGRAPHIC SPACE
;
/* A \s that actually works for Java’s native character set: Unicode */
String whitespace_charclass = "[" + whitespace_chars + "]";
/* A \S that actually works for Java’s native character set: Unicode */
String not_whitespace_charclass = "[^" + whitespace_chars + "]";
Sekarang Anda dapat menggunakan whitespace_charclass + "+"
sebagai pola di file replaceAll
.
Maaf tentang semua itu. Regex Java tidak bekerja dengan baik pada kumpulan karakter aslinya, jadi Anda benar-benar harus melewati rintangan eksotis untuk membuatnya berfungsi.
Dan jika menurut Anda ruang kosong itu buruk, Anda harus melihat apa yang harus Anda lakukan untuk mendapatkan \w
dan \b
akhirnya berperilaku dengan benar!
Ya, itu mungkin, dan ya, ini adalah kekacauan yang mencengangkan. Itu bahkan beramal. Cara termudah untuk mendapatkan perpustakaan regex yang sesuai standar untuk Java adalah dengan JNI ke barang-barang ICU. Itulah yang dilakukan Google untuk Android, karena OraSun tidak sesuai.
Jika Anda tidak ingin melakukan itu tetapi masih ingin tetap menggunakan Java, saya memiliki pustaka penulisan ulang regex front-end. Saya menulis bahwa "memperbaiki" pola Java, setidaknya agar sesuai dengan persyaratan RL1.2a di UTS # 18, Unicode Regular Expressions .