Sie können \s
in Java keine Leerzeichen für den eigenen nativen Zeichensatz verwenden, da Java die Unicode-Leerraum-Eigenschaft nicht unterstützt - obwohl dies unbedingt erforderlich ist, um RL1.2 von UTS # 18 zu erfüllen! Was es hat, ist leider nicht standardkonform.
Unicode definiert 26 Codepunkte als \p{White_Space}
: 20 davon sind verschiedene Arten von \pZ
GeneralCategory = Separator , und die restlichen 6 sind \p{Cc}
GeneralCategory = Control .
Weißraum ist eine ziemlich stabile Eigenschaft, und diese gibt es praktisch schon immer. Trotzdem hat Java keine Eigenschaft, die dem Unicode-Standard für diese entspricht. Sie müssen stattdessen Code wie den folgenden verwenden:
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 + "]";
Jetzt können Sie whitespace_charclass + "+"
als Muster in Ihrem verwenden replaceAll
.
Tut mir leid wegen all dem. Die regulären Ausdrücke von Java funktionieren mit ihrem eigenen nativen Zeichensatz einfach nicht sehr gut. Sie müssen also wirklich durch exotische Reifen springen, damit sie funktionieren.
Und wenn Sie denken , weißer Raum schlecht ist, sollten Sie sehen , was Sie tun müssen , um zu bekommen \w
und \b
endlich richtig zu verhalten!
Ja, es ist möglich und ja, es ist ein irrsinniges Durcheinander. Das ist sogar gemeinnützig. Der einfachste Weg, eine standardkonforme Regex-Bibliothek für Java zu erhalten, besteht darin, JNI auf die Intensivstation zu übertragen. Das macht Google für Android, weil OraSun's nicht mithalten kann.
Wenn Sie das nicht möchten, aber trotzdem bei Java bleiben möchten, habe ich eine von mir geschriebene Front-End-Regex-Umschreibungsbibliothek, die Javas Muster „korrigiert“, zumindest um sie an die Anforderungen von RL1.2a in UTS anzupassen # 18, Reguläre Unicode-Ausdrücke .