Como remover o último caractere de uma string?
1. Visão geral
Neste artigo rápido, vamos verificar e discutir diferentes técnicas para remover o último caractere de umString.
2. UsandoString.substring()
A maneira mais fácil é usarthe built-in substring() method da classeString.
Para remover o último caractere de um determinadoString,, temos que usar dois parâmetros:0 como o índice inicial e o índice do penúltimo caractere. Podemos conseguir isso chamando o métodoString'slength() e subtraindo1 do resultado.
No entanto,this method is not null-safee usarmos uma string vazia, isso vai falhar.
Para superar problemas com cadeias nulas e vazias, podemos agrupar o método em uma classe auxiliar:
public static String removeLastChar(String s) {
return (s == null || s.length() == 0)
? null
: (s.substring(0, s.length() - 1));
}
Podemos refatorar o código e usar o Java 8:
public static String removeLastCharOptional(String s) {
return Optional.ofNullable(s)
.filter(str -> str.length() != 0)
.map(str -> str.substring(0, str.length() - 1))
.orElse(s);
}
3. UsandoStringUtils.substring()
Em vez de reinventar a roda, podemos usar a bibliotecaStringUtils class from Apache Commons Lang3, que oferece operações úteisString. Um deles é umnull-safe substring() method, que lida com exceções.
Para incluirStringUtils, temos que atualizar nosso arquivopom.xml:
org.apache.commons
commons-lang3
3.0
StringUtils.substring() requer três parâmetros: um determinadoString, um índice do primeiro caractere (em nosso caso será sempre 0) e um índice do penúltimo caractere. Novamente, podemos simplesmente usar o métodolength()e subtrair1:
String TEST_STRING = "abcdef";
StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);
No entanto, essa operação não é segura para nulos novamente. Ele funcionará bem comStrings vazio.
4. UsandoStringUtils.chop()
StringUtils class provides the chop() method that works well with all edge scenarios: empty and null Strings.
É muito fácil de usar e requer apenas um parâmetro: oString. Seu único propósito é remover o último caractere. Nada mais nada menos:
StringUtils.chop(TEST_STRING);
5. Usando expressão regular
Também podemos remover o último caractere (ou qualquer número de caracteres) de umString fazendo bom uso de expressões regulares.
Por exemplo, podemos usarreplaceAll() method of String class itself - que leva dois parâmetros: expressão regular e a substituiçãoString:
TEST_STRING.replaceAll(".$", "");
Observe que, como estamos chamando um método emString - a operação é, obviamente,not null-safe.
Além disso,replaceAll()e expressão regex podem ser complexos à primeira vista. Você pode ler mais sobre regexhere, mas para tornar a lógica um pouco mais amigável, podemos envolvê-la em uma classe auxiliar:
public static String removeLastCharRegex(String s) {
return (s == null) ? null : s.replaceAll(".$", "");
}
Observe que seString terminar com uma nova linha, o método acima falhará, pois“.” em regex corresponde a qualquer caractere, exceto para terminadores de linha.
Finalmente, vamos reescreverthe implementation with Java 8:
public static String removeLastCharRegexOptional(String s) {
return Optional.ofNullable(s)
.map(str -> str.replaceAll(".$", ""))
.orElse(s);
}
6. Conclusão
Neste breve artigo, discutimos diferentes maneiras de remover apenas o último caractere de aString - alguns manuais, alguns prontos para uso.
E, se precisarmos de mais flexibilidade e remover mais caracteres, podemos a solução mais avançada com expressões regulares.
Como sempre, o código usado em todo o artigo pode ser encontradoover on GitHub.