557 votes

Comment supprimer le dernier caractère d'une chaîne de caractères ?

Je veux supprimer le dernier caractère d'une chaîne de caractères. J'ai essayé de faire ceci :

public String method(String str) {
    if (str.charAt(str.length()-1)=='x'){
        str = str.replace(str.substring(str.length()-1), "");
        return str;
    } else{
        return str;
    }
}

J'obtiens la longueur de la chaîne - 1 et je remplace la dernière lettre par rien (je la supprime), mais à chaque fois que j'exécute le programme, il supprime les lettres du milieu qui sont identiques à la dernière lettre.

Par exemple, le mot est "admirer" ; après avoir exécuté la méthode, j'obtiens "admie". Je veux qu'elle renvoie le mot admire.

760voto

Gary Buyn Points 4559

replace remplacera toutes les occurrences d'une lettre. Il suffit d'utiliser substring() :

public String method(String str) {
    if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
        str = str.substring(0, str.length() - 1);
    }
    return str;
}

264voto

Fahim Parkar Points 8662

Pourquoi pas une seule ligne ?

public static String removeLastChar(String str) {
    return removeLastChars(str, 1);
}

public static String removeLastChars(String str, int chars) {
    return str.substring(0, str.length() - chars);
}

Code complet

public class Main {
    public static void main (String[] args) throws java.lang.Exception {
        String s1 = "Remove Last CharacterY";
        String s2 = "Remove Last Character2";
        System.out.println("After removing s1==" + removeLastChar(s1) + "==");
        System.out.println("After removing s2==" + removeLastChar(s2) + "==");
    }

    public static String removeLastChar(String str) {
        return removeLastChars(str, 1);
    }

    public static String removeLastChars(String str, int chars) {
        return str.substring(0, str.length() - chars);
    }
}

Démo

106voto

iddqd Points 96

Puisque nous sommes sur un sujet, on peut aussi utiliser des expressions régulières

"aaabcd".replaceFirst(".$",""); //=> aaabc

89voto

Mart135688 Points 161

Le problème décrit et les solutions proposées concernent parfois la suppression des séparateurs. Si c'est votre cas, jetez un coup d'œil à Apache Commons StringUtils, il possède une méthode appelée removeEnd ce qui est très élégant.

Exemple :

StringUtils.removeEnd("string 1|string 2|string 3|", "|");

Cela donnerait : "chaîne 1|chaîne 2|chaîne 3"

54voto

BobBobBob Points 166
public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X