web-dev-qa-db-fra.com

Java - Supprimer les caractères de début ou de fin d'une chaîne?

Comment puis-je couper les caractères de début ou de fin d'une chaîne en Java?

Par exemple, le caractère barre oblique "/" - je ne suis pas intéressé par les espaces et cherche à supprimer les caractères de début ou de fin à des moments différents.

49
Brad Parks

Vous pourriez utiliser

De premier plan:

System.out.println("//test/me".replaceAll("^/+", ""));

Trailing:

System.out.println("//test/me//".replaceAll("/+$", ""));
74
Reimeus

Vous pouvez utiliser Apache StringUtils.stripStart pour supprimer les premiers caractères ou StringUtils.stripEnd pour supprimer les derniers caractères.

Par exemple:

System.out.println(StringUtils.stripStart("//test/me", "/"));

affichera:

teste moi

Notez que si, pour une raison quelconque, vous ne pouvez pas utiliser toute la bibliothèque StringUtils, vous pouvez simplement extraire les parties correspondantes, comme détaillé ici :

31
Brad Parks

Vous pouvez utiliser une simple itération si vous souhaitez supprimer les caractères de début d'une chaîne:

String removeLeadingChar(String s, char c) {
    int i;
    for(i = 0; i < s.length() && s.charAt(i) == c; ++i);
    return s.substring(i);
}

la même logique s’applique si vous souhaitez supprimer les char de fin.

2
Oleg

Découper avec un caractère, une chaîne ou une expression régulière

Si le temps d'exécution n'est pas un gros problème pour vous, alors ce code sera vraiment utile.

public class StringTrimmer {
    public static String trim(String string, char ch){
        return trim(string, ch, ch);
    }

    public static String trim(String string, char leadingChar, char trailingChar){
        return string.replaceAll("^["+leadingChar+"]+|["+trailingChar+"]+$", "");
    }

    public static String trim(String string, String regex){
        return trim(string, regex, regex);
    }

    public static String trim(String string, String leadingRegex, String trailingRegex){
        return string.replaceAll("^("+leadingRegex+")+|("+trailingRegex+")+$", "");
    }

    // test
    public static void main(String[] args) {
        System.out.println(trim("110100", '1', '0')); // outputs: 01
        System.out.println(trim("**Aa0*#**", '*')); // outputs: Aa0*#
        System.out.println(trim("123##22222", "12", "22")); // outputs: 3##2
        System.out.println(trim("101101##10101", "101")); // outputs: ##10
        System.out.println(trim("123##abcde", "\\d", "[c-e]")); // outputs: ##ab
    }
}
2
Minhas Kamal

Pour ceux qui utilisent le printemps:

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html#trimTrailingCharacter-Java.lang.String-Char-

import org.springframework.util.StringUtils;    

public void setFileName(String fileName) {
    // If the extension does not exist trim the trailing period
    this.fileName = StringUtils.trimTrailingCharacter(fileName,'.');
}
1
Gabriel Gates

Ma version de rognage des caractères de début et de fin String s dans String str. Les deux arguments peuvent être nuls. Lorsque str n'a pas de début et/ou fin, il n'est pas changé.

String trim(String str, String s) {
    String res = s == null ? str : str == null ? null : s.length() >= str.length() ? str : str.replaceFirst(s, "");
    if ((res != null) && (s != null) && (res.length() >= s.length())) {
        return res.substring(res.length() - s.length(), res.length()).equals(s) ? res.substring(0, res.length() - s.length()) : res;
    }
    return res;
}
1