Vous ne pouvez pas utiliser \s
en Java pour correspondre à un espace blanc sur son propre jeu de caractères locaux, car Java ne supporte pas l'Unicode blanc, espace bien - même si cela est strictement nécessaire pour répondre à l'UT#18 RL1.2! Ce qu'il fait n'est pas de normes conformes, hélas.
Unicode définit les 26 points de code comme \p{White_Space}
: 20 d'entre eux sont de diverses sortes d' \pZ
GeneralCategory=Séparateur, et les 6 autres sont \p{Cc}
GeneralCategory=Contrôle.
L'espace blanc est une jolie propriété stable, et ceux mêmes que celles qui ont été autour presque jamais. De même, Java n'a pas de propriété qui est conforme à La Norme Unicode pour ceux-ci, donc vous devez utiliser le code comme ceci:
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 + "]";
Maintenant, vous pouvez utiliser whitespace_charclass + "+"
comme le motif dans votre replaceAll
.
=begin soapbox
Désolé 'bout tout cela. Java est regexes ne fonctionnent pas très bien sur son propre jeu de caractères locaux, et si vous avez vraiment à sauter à travers des exotiques, des cerceaux pour les faire travailler.
Et si vous pensez que l'espace blanc est mauvais, vous devriez voir ce que vous avez à faire pour obtenir \w
et \b
, pour enfin se comporter correctement!
Oui, c'est possible, et oui, c'est un mindnumbing mess. C'est des fins de bienfaisance, même. La meilleure façon d'obtenir une des normes comforming bibliothèque regex pour Java est à la JNI plus aux soins intensifs de trucs. C'est ce que Google fait pour Android, parce OraSun de ne pas être à la hauteur.
Si vous ne voulez pas le faire, mais veulent toujours rester avec Java, j'ai un avant la fin de la regex de la réécriture de la bibliothèque, j'ai écrit que les "corrections" de Java modèles, au moins pour obtenir leur conformité avec les exigences de la RL1.2a en UT#18, Unicode des Expressions Régulières.
=end soapbox