Como remover o último caractere de uma string?

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.