\s
Java'da beyaz boşluğu kendi yerel karakter kümesiyle eşleştirmek için kullanamazsınız çünkü Java, Unicode beyaz boşluk özelliğini desteklemiyor - bunu yapmak kesinlikle UTS # 18'in RL1.2'sini karşılamak için gerekli olsa da ! Ne yazık ki sahip olduğu şey standartlara uygun değil.
Unicode 26 kod noktasını şu şekilde tanımlar \p{White_Space}
: 20 tanesi çeşitli \pZ
GeneralCategory = Separator türleri ve geri kalan 6 tanesi \p{Cc}
GeneralCategory = Control .
Beyaz boşluk oldukça istikrarlı bir özelliktir ve aynı olanlar neredeyse sonsuza kadar ortalıktadır. Öyle olsa bile, Java'nın bunlar için Unicode Standardına uyan bir özelliği yoktur, bu nedenle bunun yerine aşağıdaki gibi bir kod kullanmanız gerekir:
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 + "]";
Şimdi kullanabilirsiniz whitespace_charclass + "+"
Gözlerinde farklı desen olarak replaceAll
.
Tüm bunlar için üzgünüm. Java'nın normal ifadeleri kendi yerel karakter setinde pek iyi çalışmıyor ve bu yüzden onları çalıştırmak için gerçekten egzotik çemberlerden geçmeniz gerekiyor.
Ve beyaz boşluğun kötü olduğunu düşünüyorsanız, elde etmek \w
ve \b
sonunda düzgün davranmak için ne yapmanız gerektiğini görmelisiniz !
Evet, mümkün ve evet, kafa karıştırıcı bir karmaşa. Bu hayırseverlik bile. Java için standartları karşılayan bir normal ifade kitaplığı edinmenin en kolay yolu, JNI'ye ICU'nun malzemelerine gitmektir. Google'ın Android için yaptığı şey bu, çünkü OraSun'un ölçüsü yok.
Bunu yapmak istemiyor ama yine de Java'ya bağlı kalmak istiyorsanız, Java'nın kalıplarını en azından UTS'deki RL1.2a gereksinimlerine uydurmak için "düzelttiğini" yazdım. # 18, Unicode Normal İfadeler .