O que é uma boa alternativa de LTRIM e RTRIM em Java?

O que é uma boa alternativa de funções JavaScript ltrim() e rtrim() em Java?

Com um regex você poderia escrever:

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

Se você tiver que fazer isso com frequência, poderá criar e compilar um padrão para um melhor desempenho:

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

Do ponto de vista do desempenho, uma rápida micro referência mostra (post JIT compilation) que a abordagem regex é cerca de 5 vezes mais lenta que o loop (0.49s vs. 0.11s para 1 milhão de ltrim).

Eu pessoalmente acho a abordagem regex mais legível e menos propensa a erros, mas se o desempenho é um problema, você deve usar a solução de loop.

Usar o regex pode ser bom, mas é bem mais lento que uma simples function 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); } 

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

Além disso, existem algumas bibliotecas que fornecem essas funções. Por exemplo, Spring StringUtils . O Apache Commons StringUtils também oferece funções semelhantes: 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*/" "); } 

Com base na resposta do @bezmax, dei uma olhada no Spring StringUtils , mas ele não pôde justificar a sobrecarga para eu mudar para o framework Spring. Portanto, decidi criar uma class Characters para facilmente as strings de corte esquerda / direita para qualquer caractere (-class). A turma está disponível no GitHub .

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

Se você gostaria de aparar para espaços em branco, há uma class de caracteres predefinida disponível:

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

A class também apresenta outros tipos de operações de caracteres, como condense , replace ou split .

Guava tem CharMatcher trimLeadingFrom e trimTrailingFrom

por exemplo, CharMatcher.whitespace.trimTrailingFrom(s)