Non è possibile utilizzarlo \sin Java per abbinare lo spazio bianco sul proprio set di caratteri nativi, perché Java non supporta la proprietà dello spazio bianco Unicode, anche se è strettamente necessario per soddisfare RL1.2 di UTS # 18! Quello che ha non è conforme agli standard, ahimè.
Unicode definisce 26 punti di codice come \p{White_Space}: 20 di loro sono vari tipi di \pZ GeneralCategory = Separator , e i restanti 6 sono\p{Cc} GeneralCategory = Control .
Lo spazio bianco è una proprietà piuttosto stabile e quelle stesse esistono praticamente da sempre. Anche così, Java non ha proprietà conformi allo standard Unicode per questi, quindi devi invece usare codice come questo:
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 + "]";
Ora puoi usare whitespace_charclass + "+" come modello nel tuo file replaceAll.
Mi dispiace per tutto questo. Le regex di Java semplicemente non funzionano molto bene sul proprio set di caratteri nativi, quindi devi davvero saltare attraverso cerchi esotici per farle funzionare.
E se pensi che lo spazio bianco sia negativo, dovresti vedere cosa devi fare per ottenerlo \w e \bfinalmente comportarti correttamente!
Sì, è possibile, e sì, è un casino stupefacente. Anche questo è caritatevole. Il modo più semplice per ottenere una libreria regex conforme agli standard per Java è utilizzare JNI per le cose di ICU. Questo è quello che fa Google per Android, perché quello di OraSun non è all'altezza.
Se non vuoi farlo ma vuoi comunque restare con Java, ho una libreria di riscrittura regex front-end che ho scritto che "corregge" i pattern di Java, almeno per renderli conformi ai requisiti di RL1.2a in UTS # 18, espressioni regolari Unicode .