una retornar metodos leer imprimir guardar funciones espacios definir definicion con como cadenas cadena java string unicode

retornar - ¿Cómo recortar correctamente los espacios en blanco de una cadena en Java?



metodos de cadenas en java (5)

El método String.trim() JDK es bastante ingenuo, y solo elimina los caracteres de control ascii.

Apache Commons '' StringUtils.strip() es un poco mejor, pero utiliza el Character.isWhitespace() JDK, que no reconoce el espacio sin interrupciones como espacios en blanco .

Entonces, ¿cuál sería la forma más completa, compatible con Unicode, segura y adecuada para recortar una cadena en Java?

Y, por cierto, ¿hay una mejor biblioteca que commons-lang que debería utilizar para este tipo de cosas?


Es realmente difícil definir qué constituye un espacio en blanco. A veces uso espacios no rompibles solo para asegurarme de que no se eliminen. Por lo tanto, será difícil encontrar una biblioteca que haga exactamente lo que usted desea.

Uso mi propio ajuste () si quiero recortar todos los espacios en blanco. Aquí está la función que uso para verificar si hay espacios en blanco,

public static boolean isWhitespace (int ch) { if (ch == '' '' || (ch >= 0x9 && ch <= 0xD)) return true; if (ch < 0x85) // short-circuit optimization. return false; if (ch == 0x85 || ch == 0xA0 || ch == 0x1680 || ch == 0x180E) return true; if (ch < 0x2000 || ch > 0x3000) return false; return ch <= 0x200A || ch == 0x2028 || ch == 0x2029 || ch == 0x202F || ch == 0x205F || ch == 0x3000; }


Google ha hecho que guava-libraries estén disponibles recientemente. Puede tener lo que estás buscando:

CharMatcher.inRange(''/0'', '' '').trimFrom(str)

es equivalente a String.trim (), pero puede personalizar qué recortar, consulte JavaDoc.

Por ejemplo, tiene su propia definición de WHITESPACE que difiere del JDK y se define de acuerdo con el último estándar Unicode, por lo que lo que necesita se puede escribir como:

CharMatcher.WHITESPACE.trimFrom(str)


Hice pequeños cambios en el método de ajuste de Java () y admite caracteres no ascii. Este método se ejecuta más rápido que la mayoría de las implementaciones.

public static String trimAdvanced(String value) { Objects.requireNonNull(value); int strLength = value.length(); int len = value.length(); int st = 0; char[] val = value.toCharArray(); if (strLength == 0) { return ""; } while ((st < len) && (val[st] <= '' '') || (val[st] == ''/u00A0'')) { st++; if (st == strLength) { break; } } while ((st < len) && (val[len - 1] <= '' '') || (val[len - 1] == ''/u00A0'')) { len--; if (len == 0) { break; } } return (st > len) ? "" : ((st > 0) || (len < strLength)) ? value.substring(st, len) : value; }


Juro que solo vi esto después de publicar la pregunta: Google acaba de lanzar Guava , una biblioteca de utilidades básicas de Java.

No he intentado esto todavía, pero por lo que puedo decir, esto es totalmente compatible con Unicode:

String s = " /t testing /u00a0" s = CharMatcher.WHITESPACE.trimFrom(s);


Siempre he encontrado que el trim funciona bastante bien para casi todos los escenarios.

Sin embargo, si realmente desea incluir más caracteres, puede editar el método strip de commons-lang para incluir no solo la prueba de Character.isWhitespace , sino también Character.isSpaceChar que parece ser lo que falta. A saber, las siguientes líneas en stripStart y stripEnd , respectivamente:

  • while ((start != strLen) && Character.isWhitespace(str.charAt(start)))
  • while ((end != 0) && Character.isWhitespace(str.charAt(end - 1)))