¿Cuál es una buena alternativa de LTRIM y RTRIM en Java?

¿Cuál es una buena alternativa de las ltrim() JavaScript ltrim() y rtrim() en Java?

Con una expresión regular, podrías escribir:

 String s = ... String ltrim = s.replaceAll("^\\s+",""); String rtrim = s.replaceAll("\\s+$",""); 

Si tiene que hacerlo a menudo, puede crear y comstackr un patrón para un mejor rendimiento:

 private final static Pattern LTRIM = Pattern.compile("^\\s+"); public static String ltrim(String s) { return LTRIM.matcher(s).replaceAll(""); } 

Desde una perspectiva de rendimiento, un micro-benchmark rápido muestra (después de la comstackción JIT) que el enfoque regex es aproximadamente 5 veces más lento que el ciclo (0.49s vs. 0.11s para 1 millón de ltrim).

Personalmente encuentro que el enfoque de expresiones regulares es más legible y menos propenso a errores, pero si el rendimiento es un problema, debe usar la solución de bucle.

Usar regex puede ser bueno, pero es bastante más lento que las simples funciones de recorte:

 public static String ltrim(String s) { int i = 0; while (i < s.length() && Character.isWhitespace(s.charAt(i))) { i++; } return s.substring(i); } public static String rtrim(String s) { int i = s.length()-1; while (i >= 0 && Character.isWhitespace(s.charAt(i))) { i--; } return s.substring(0,i+1); } 

Fuente: http://www.fromdev.com/2009/07/playing-with-java-string-trim-basics.html

Además, hay algunas bibliotecas que ofrecen tales funciones. Por ejemplo, Spring StringUtils . Apache Commons StringUtils también ofrece funciones similares: strip, stripStart, stripEnd

 StringUtils.stripEnd("abc ", null) = "abc" 
 import org.apache.commons.lang3.StringUtils; private String rTrim(String str) { return StringUtils.stripEnd(str, /*stripChars*/" "); } private String lTrim(String str) { return StringUtils.stripStart(str, /*stripChars*/" "); } 

Basándome en la respuesta de @bezmax, eché un vistazo a Spring StringUtils , pero no podía justificar la sobrecarga de cambiar al framework de Spring. Por lo tanto, decidí crear una clase de Characters para cadenas de recorte fácilmente izquierda / derecha para cualquier personaje dado (-class). La clase está disponible en GitHub .

 Characters.valueOf('x').trim( ... ) Characters.valueOf('x').leftTrim( ... ) Characters.valueOf('x').rightTrim( ... ) 

Si desea recortar para espacios en blanco, hay una clase de caracteres predefinida disponible:

 Characters.WHITESPACE.trim( ... ) Characters.WHITESPACE.leftTrim( ... ) Characters.WHITESPACE.rightTrim( ... ) 

La clase también presenta otros tipos de operaciones de caracteres, tales como condense , replace o split .

La guayaba tiene CharMatcher trimLeadingFrom y trimTrailingFrom

por ejemplo, CharMatcher.whitespace.trimTrailingFrom(s)