Diferencia entre el ajuste String () y la tira () en Java 11

Mikhail Kholodkov:

Entre otros cambios, JDK 6 11 introduce nuevos métodos para la clase java.lang.String:

  • repeat(int)- Repite la cadena tantas veces como sea proporcionada por el intparámetro
  • lines() - Utiliza un Spliterator para proporcionar perezosamente líneas de la cadena de origen
  • isBlank() - Indica si la cadena está vacía o contiene caracteres de espacio en blanco sólo se
  • stripLeading() - Elimina el espacio en blanco desde el principio
  • stripTrailing() - Elimina el espacio en blanco desde el extremo
  • strip() - Elimina el espacio en blanco de ambos, el comienzo y el final de cadena

En particular, strip()se ve muy similar a trim(). De acuerdo con este artículo strip*() métodos están diseñados para:

El String.strip (), String.stripLeading (), y String.stripTrailing () métodos de ajuste de espacio en blanco [como se determina por Character.isWhiteSpace ()] de la parte delantera, la espalda o la parte delantera y posterior de la cadena de destino.

String.trim() JavaDoc estados:

/**
  * Returns a string whose value is this string, with any leading and trailing
  * whitespace removed.
  * ...
  */

Que es casi idéntica a la cita anterior.

¿Qué es exactamente la diferencia entre String.trim()y String.strip()desde Java 11?

Mikhail Kholodkov:

En resumen: strip()es la evolución "Unicode-consciente" de trim().

RSE: JDK-8200378

Problema

String :: ajuste ha existido desde los primeros días de Java cuando Unicode no se había desarrollado plenamente la norma que usamos hoy en día ampliamente.

La definición de espacio utilizado por string :: ajuste es cualquier punto de código menor que o igual al punto de código de espacio (\ u0020), comúnmente referido como ASCII o de control ISO caracteres.

Unicode-aware rutinas de recorte deben utilizar caracteres :: isWhitespace (int).

Además, los desarrolladores no han sido capaces de eliminar específicamente indentación espacio en blanco, o eliminar específicamente arrastra espacio en blanco.

Solución

Introducir el recorte de métodos que son Unicode espacio en blanco conscientes y proporcionan un control adicional de que sólo lleva o sólo por detrás.

Una característica común de estos nuevos métodos es que utilizan una definición diferente (más reciente) del "espacio en blanco" que hizo los viejos métodos tales como String.trim(). Bug JDK-8200373 .

El JavaDoc actual de Cadena :: ajuste no dejar claro qué definición de "espacio" se utiliza en el código. Con los métodos de recorte adicionales venir en un futuro próximo que utilizan una definición diferente de espacio, aclaración es imprescindible. String :: usos de equipamiento la definición del espacio como cualquier punto de código que es menor o igual al punto de código de carácter de espacio (\ u0020.) Los nuevos métodos de recorte usar la definición del espacio (blanco) como cualquier punto de código que devuelve true cuando pasa a la carácter :: isWhitespace predicado.

El método isWhitespace(char)fue añadido a Charactercon JDK 1.1, pero el método isWhitespace(int)no se introdujo a la Characterclase hasta JDK 1.5. El último método (el que aceptar un parámetro de tipo intse añadió) para apoyar caracteres complementarios. Los comentarios Javadoc de la Characterclase definen caracteres complementarios (normalmente modelados con basado en int "punto de código") frente caracteres BMP (normalmente modelados con carácter individual):

El conjunto de caracteres de U + 0000 a U + FFFF se refiere a veces como el Plano multilingüe básico (BMP). Personajes cuyo código de puntos son mayores que U + FFFF se llaman caracteres complementarios. La plataforma Java utiliza la representación UTF-16 en arrays de char y en las clases String y StringBuffer. En esta representación, caracteres suplementarios están representados como un par de valores CHAR ... Un valor char, por lo tanto, representa multilingüe básico Plane (BMP) puntos de código, incluyendo los puntos de código sustituto, o unidades de código de la codificación UTF-16. Un valor int representa a todos los puntos de código Unicode, incluyendo puntos de código suplementarios. ... Los métodos que sólo aceptan un valor Char no pueden soportar caracteres complementarios. ... Los métodos que aceptan un soporte valor int todos los caracteres Unicode, incluyendo caracteres complementarios.

OpenJDK Conjunto de cambios .


Comparación de referencia entre trim()y strip()- ¿Por qué es String.strip () 5 veces más rápido que String.trim () para la cadena en blanco En Java 11

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=37408&siteId=1
Recomendado
Clasificación