Diferenza entre métodos de cadea Trim () e Strip () en Java 11

En resumo: strip() é unha evolución “consciente de Unicode” de trim().

CSR: jdk-8200378

Problema

Cadea :: Trim existiu desde os primeiros días de Java cando Unicode non evolucionara completamente ao estándar que usamos hoxe.

A definición de espazo utilizado por cadea :: Trim é calquera punto de código inferior ou igual ao punto de código espacial (\ u0020), comunmente referido como caracteres de control ASCII ou ISO.

As rutinas trim compatibles con Unicode deberían usar Personaxe :: iswverspace (int).

Ademais, os desenvolvedores non foron capaces de eliminar específicamente o espazo en branco de sangrado ou eliminando específicamente o espazo en branco ao final.

Solución

Introduza o método S de recorte que consideran os espazos en branco Unicode e proporcionan un control adicional de só ao principio ou ao final.

Unha característica común destes novos métodos é que usan Un diferente (máis recente “espazo en branco” definición que os métodos antigos como String.trim(). Erro JDK-8200373.

A actual Javadoc para cadea :: Trim non deixa claro Que definición de “espazo” se usa no código. Con métodos de recorte adicionais que veñen nun futuro próximo que utilizan unha definición diferente de espazo, a aclaración é imperativa. Cadea :: Trim usa a definición do espazo como calquera punto de código que é menor ou igual ao punto de código do carácter espacial (\ u0020). Os novos métodos de recorte usarán a definición do espazo (branco) como calquera punto de código que se devolva a verdade cando se pasa ao personaxe :: predicado do espazo en branco.

O método isWhitespace(char) foi engadido a Character con jdk 1.1, pero o método Non se introduciu na clase Character ata o JDK 1.5. O último método (que acepta un parámetro de tipo int) foi engadido para admitir caracteres complementarios. Os comentarios de Javadoc á clase Character definir caracteres adicionais (xeralmente configurados con “puntos de código” en base a INT) versus caracteres BMP (normalmente configurados cun único carácter):

O conxunto de caracteres de U + 0000 a U + FFFF é ás veces referido como o plano multilingüe básico (BMP). Os personaxes cuxos puntos de código son maiores que U + FFFF chámanse caracteres complementarios. A plataforma Java usa a representación UTF-16 en matrices de carácter e as clases de cadea e Stringbuffer. Nesta representación, os caracteres complementarios están representados como un par de valores de char … un valor de char, polo tanto, representa puntos de código do nivel multilingüe básico (BMP), incluíndo puntos de código substituto ou unidades de código do UTF-16 codificación. Un valor int representa todos os puntos de código Unicode, incluídos os puntos de código complementarios. … os métodos que só aceptan un valor de char non poden admitir caracteres complementarios. … os métodos que aceptan un valor de int todos os caracteres Unicode, incluídos caracteres complementarios.

OpenJDK Cambivado.

Comparación comparativa entre trim() e strip() – por que string.strip () é de 5 veces máis rápido que String.trim () para unha cadea en branco en Java 11

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *