Diferència entre els mètodes String trim () i strip () en Java 11

En resum: strip() és una evolució” conscient d’Unicode “de trim().

CSR: JDK-8.200.378

Problema

String :: trim ha existit des dels primers dies de Java quan Unicode no havia evolucionat completament a l’estàndard que utilitzem avui dia.

La definició d’espai utilitzat per String :: trim és qualsevol punt de codi menor o igual a del punt de codi d’espai (\ u0020), comunament denominat ASCII o caràcters de control ISO.

Les rutines de retallada compatibles amb Unicode han d’usar Character :: isWhitespace (int).

a més, els desenvolupadors no han pogut eliminar específicament l’espai en blanc de sangria o eliminar específicament l’espai en blanc a al final.

Solució

Introduïu mètode s de retallada que tinguin en compte l’espai en blanc d’Unicode i proporcioni un control addicional de sol a l’inici o al final.

Una característica comuna d’aquests nous mètodes és que utilitzen una definició d ‘ “espai en blanc” diferent (més recent) que els mètodes antics com String.trim(). Error JDK-8.200.373.

El Javadoc actual per String :: trim no deixa clar quina definició d ‘ “espai” s’usa en el codi. Amb mètodes de retallada addicionals que vénen en un futur proper que usen una definició diferent d’espai, l’aclariment és imperativa. String :: trim fa servir la definició d’espai com qualsevol punt de codi que és menor o igual que el punt de codi de el caràcter d’espai (\ u0020). Els mètodes de retallada més nous faran servir la definició d’espai (blanc) com qualsevol punt de codi que retorni veritable quan es passa a l’Caràcter :: predicat de l’espai en blanc.

el mètode isWhitespace(char) es va agregar a Character amb JDK 1.1, però el mètode isWhitespace(int) no es va introduir a la classe Character fins JDK 1.5. L’últim mètode (el qual accepta un paràmetre de tipus int) es va agregar per admetre caràcters suplementaris. Els comentaris de Javadoc per a la classe Character defineixen caràcters suplementaris (generalment modelats amb “punts de codi” basats en int) versus BMP caràcters (típicament modelats amb un sol caràcter):

el conjunt de caràcters d’U + 0000 a U + FFFF de vegades es coneix com el Pla Multilingüe Bàsic (BMP). Els caràcters els punts de codi són més grans que U + FFFF s’anomenen caràcters suplementaris. La plataforma Java fa servir la representació UTF-16 a una matriu de caràcters i en les classes String i StringBuffer. En aquesta representació, els caràcters suplementaris es representen com un parell de valors char … Un valor char, per tant, representa punts de codi de el plànol multilingüe bàsic (BMP), inclosos els punts de codi substituts, o unitats de codi de la codificació UTF-16. Un valor int representa tots els punts de codi Unicode, inclosos els punts de codi complementaris. … Els mètodes que només accepten un valor char no poden admetre caràcters suplementaris. … Els mètodes que accepten un valor int admeten tots els caràcters Unicode, inclosos els caràcters complementaris.

OpenJDK changeset.

comparació comparativa entre trim() i strip() – per què String.strip () és 5 vegades més ràpid que String.trim () per a una cadena en blanc en Java 11

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *