72 votes

Garniture de caractères en Java

Comment puis-je couper les caractères en Java?
par exemple

String j = "\joe\jill\".Trim(new char[] {"\"});

j devrait être

"joe\jill"

String j = "jack\joe\jill\".Trim("jack");

j devrait être

"\joe\jill\"

etc

105voto

Colin Gislason Points 3546

Apache Commons a une grande StringUtils classe. En StringUtils il y a un strip(String, String) méthode qui permettra de faire ce que vous voulez.

Je recommande fortement d'utiliser Apache Commons de toute façon, surtout les Collections et Lang bibliothèques.

46voto

Paulo Guedes Points 4241

De ce fait ce que vous voulez:

public static void main (String[] args) {
    String a = "\\joe\\jill\\";
    String b = a.replaceAll("\\\\$", "").replaceAll("^\\\\", "");
    System.out.println(b);
}

L' $ est utilisé pour supprimer la séquence à la fin de la chaîne. L' ^ est utilisé pour supprimer dans le debut.

Comme alternative, vous pouvez utiliser la syntaxe suivante:

String b = a.replaceAll("\\\\$|^\\\\", "");

L' | "signifie " ou".

Dans le cas où vous souhaitez couper d'autres caractères, juste adapter la regex:

String b = a.replaceAll("y$|^x", ""); // will remove all the y from the end and x from the beggining

20voto

Cowan Points 17235

Pour l'instant, je préfère la deuxième. Colins' Apache commons-lang réponse, mais une fois que Google goyave, les bibliothèques est libéré, le CharMatcher classe à faire ce que vous voulez bien:

String j = CharMatcher.is('\\').trimFrom("\\joe\\jill\\"); 
// j is now joe\jill

CharMatcher est très simple + puissant ensemble d'Api ainsi que certaines constantes prédéfinies qui rend la manipulation très facile:

CharMatcher.is(':').countIn("a:b:c"); // returns 2
CharMatcher.isNot(':').countIn("a:b:c"); // returns 3
CharMatcher.inRange('a', 'b').countIn("a:b:c"); // returns 2
CharMatcher.DIGIT.retainFrom("a12b34"); // returns "1234"
CharMatcher.ASCII.negate().removeFrom("a®¶b"); // returns "ab";

etc. Très sympa tout ça.

7voto

jake_hetfield Points 2344

Voici un autre non-regexp, non-super-génial, non-super-optimisé, mais très facile à comprendre non-externe-lib solution:

public static String trimStringByString(String text, String trimBy) {
    int beginIndex = 0;
    int endIndex = text.length();

    while (text.substring(beginIndex, endIndex).startsWith(trimBy)) {
        beginIndex += trimBy.length();
    } 

    while (text.substring(beginIndex, endIndex).endsWith(trimBy)) {
        endIndex -= trimBy.length();
    }

    return text.substring(beginIndex, endIndex);
}

Utilisation:

String trimmedString = trimStringByString(stringToTrim, "/");

1voto

Valentin Rocher Points 7524

Vous pouvez utiliser removeStart et removeEnd de Apache Commons Lang StringUtils

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