En bref: strip()
est "Unicode" l'évolution de l' trim()
.
LA RSE : JDK-8200378
Problème
String::trim a existé dès les premiers jours de Java lors de l'Unicode
n'avait pas évolué à la norme, nous avons largement utilisé aujourd'hui.
La définition de l'espace utilisé par la Chaîne de caractères::trim est à tout point de code moins
égale ou supérieure à l'espace de point de code (\u0020), communément appelée
ASCII ou ISO caractères de contrôle.
Unicode parage des routines doivent utiliser
Personnage::isWhitespace(int).
En outre, les développeurs n'ont pas été en mesure d'éliminer spécifiquement
l'indentation espace blanc ou de supprimer fuite des blancs
de l'espace.
Solution
Introduire des méthodes de raccord qui sont en Unicode espace blanc au courant
et de fournir un contrôle supplémentaire de conduire uniquement à droite ou à gauche seulement.
Une caractéristique commune de ces nouvelles méthodes est qu'ils utilisent un autre (plus récente) de la définition de "espace" que faisaient les anciennes méthodes telles que l' String.trim()
. Bug JDK-8200373.
L'actuel JavaDoc de String::trim ne précise pas qui
définition de "l'espace" est utilisé dans le code. Avec d'autres
méthodes de raccord à venir dans un avenir proche qui utilisent une autre
définition de l'espace, la clarification est impératif. String::trim utilise
la définition de l'espace comme tout codepoint qui est inférieure ou égale à
le caractère espace codepoint (\u0020.) Nouveaux parage des méthodes de
utiliser la définition de (blanc) de l'espace comme tout codepoint qui retourne true
lorsqu'il est passé au Personnage::isWhitespace prédicat.
La méthode isWhitespace(char)
a été ajouté à l' Character
avec le JDK 1.1, mais la méthode isWhitespace(int)
n'a pas été introduit à l' Character
classe jusqu'à la JDK 1.5. La méthode de ce dernier (l'un acceptant un paramètre de type int
) a été ajoutée à l'appui de caractères supplémentaires. Les commentaires Javadoc pour l' Character
classe de définir des caractères supplémentaires (généralement modélisés avec des int à base de "code") par rapport BMP caractères (généralement modélisé avec un seul caractère):
Le jeu de caractères à partir de U+0000 à U+FFFF est parfois appelé
comme le Basic Multilingual Plane (BMP). Des personnages dont les points de code
sont plus grand que U+FFFF sont appelés des caractères supplémentaires. La Java
plate-forme utilise la représentation UTF-16 dans des tableaux de char et dans le
String et StringBuffer classes. Dans cette représentation, complémentaire
les personnages sont représentés comme une paire de char valeurs ... Un char de la valeur,
par conséquent, représente Basic Multilingual Plane (BMP) de points de code,
y compris la substitution des points de code, ou code des unités de l'UTF-16
l'encodage. Une valeur int représente tous les points de code Unicode, y compris
code complémentaire des points. ... Les méthodes qui n'acceptent qu'un char
la valeur ne peut pas en charge les caractères supplémentaires. ... Les méthodes qui
accepter une valeur int soutien de tous les caractères Unicode, y compris
les caractères supplémentaires.
OpenJDK Ensemble De Modifications.
La comparaison entre trim()
et strip()
- Pourquoi est-Chaîne.strip() 5 fois plus rapide que la Chaîne.trim() pour la chaîne vide En Java 11