en résumé: strip()
est une évolution « au courant de Unicode » de trim()
.
CSR: JDK-8200378
problème
string :: La garniture existe depuis les premiers jours de Java lorsque Unicode n’avait pas complètement évolué vers la norme que nous utilisons aujourd’hui.
La définition de l’espace utilisé par string :: La bordure est n’importe quel point de code inférieur ou égal au point de code de l’espace (\ U0020), communément appelé caractères de contrôle ASCII ou ISO.
Conchats compatibles avec Unicode devrait utiliser Caractère :: IswhitSpace (int).
De plus, les développeurs n’ont pas été en mesure d’éliminer spécifiquement l’espace vide de saignement ou d’éliminer spécifiquement l’espace vide à la fin.
Solution
Entrée méthode S de coupure qui envisagent des flans Unicode et fournissent un contrôle supplémentaire de Seulement au début ou à la fin.
Une caractéristique commune de ces nouvelles méthodes est qu’elles utilisent une définition différente (la plus récente « » espace vide « que des méthodes anciennes telles que String.trim()
. Erreur JDK-8200373.
Le Javadoc actuel pour chaîne :: La garniture ne précise pas la définition de « espace » utilisé dans le code. Avec des méthodes de détourage supplémentaires qui arrivent dans un avenir proche qui utilisent une définition différente de l’espace, la clarification est impérative. String :: La bordure utilise la définition de l’espace comme point de code inférieur ou égal au point de code du caractère d’espace (\ u0020). Les méthodes de découpage les plus récentes utiliseront la définition de l’espace (blanc) comme tout point de code qui renvoie true quand il est transmis au caractère :: prêché de l’espace vide.
La méthode isWhitespace(char)
a été ajoutée à Character
avec JDK 1.1, mais la méthode isWhitespace(int)
Il n’a pas été introduit dans la classe Character
jusqu’à JDK 1.5. La dernière méthode (qui accepte un paramètre de type ) a été ajouté pour admettre des caractères supplémentaires. Les commentaires de Javadoc pour la classe Character
définissent les caractères supplémentaires (généralement modélisés avec « Points de code » basés sur int) par rapport aux caractères BMP (typiquement modélisés avec un seul caractère):
Le jeu de caractères de U + 0000 sur U + FFFF est parfois appelé plan multilingue de base (BMP). Les caractères dont les points de code sont supérieurs à U + FFFF sont appelés caractères supplémentaires. La plate-forme Java utilise la représentation UTF-16 dans les tableaux de caractères et les classes de chaîne et de Stringbuffer. Dans cette représentation, les caractères supplémentaires sont représentés comme une paire de valeurs de caractère … une valeur de caractère représente donc des points de code du niveau multilingue de base (BMP), y compris des points de code de substitution, ou des unités de code de l’UTF-16 codage. Une valeur INT représente tous les points de code Unicode, y compris des points de code complémentaires. … Les méthodes qui acceptent uniquement une valeur de caractère ne peuvent pas admettre des caractères supplémentaires. … Les méthodes qui acceptent une valeur INT prennent en charge tous les caractères Unicode, y compris des caractères complémentaires.
Modification openjdk.
comparaison comparative.
entre trim()
et
– pourquoi string.strip () est 5 fois plus rapide que cordes.trim () pour une chaîne blanche en Java 11