2010-01-27 3 views
12

Bei der Konvertierung einer C# -Anwendung nach Java stieß ich auf die Methode TrimEnd von String. Gibt es eine äquivalente Java-Implementierung? Ich kann keinen finden.TrimEnd für Java?

Ich würde es lieber nicht durch trim ersetzen, da ich die Bedeutung oder den Betrieb des Programms an dieser Stelle nicht ändern möchte, es sei denn, ich muss.

Antwort

23

Es gibt keine direkte Entsprechung, aber wenn Sie Leerzeichen entfernt werden sollen Hinter Sie verwenden können:

"string".replaceAll("\\s+$", ""); 

\s ist der reguläre Ausdruck Zeichen „Leerzeichen“ gesetzt, wenn Sie nur über Strippen Leerzeichen am Ende egal, Sie kann es durch das Leerzeichen ersetzen. Wenn Sie die allgemeinere Form von trimEnd() verwenden wollen, das ist eine beliebige Menge von nachfolgenden Zeichen zu entfernen, dann müssen Sie es ändern leicht zu verwenden:

"string".replaceAll("[" + characters + "]+$", ""); 

Sie sich bewusst sein, dass das erste Argument eine generische Regex und wenn einer Ihrer characters der ] ist, dann muss dies das erste Zeichen in Ihrer Liste sein. Eine vollständige Beschreibung der Java-Regex-Muster finden Sie unter the javadoc.

Sollten Sie jemals die trimstart() Methode von .net implementieren müssen, ist es fast das gleiche, aber würde wie folgt aussehen:

"string".replaceAll("^[" + characters + "]+", ""); 
+0

@finnw: Sie sind richtig ... die Regex muss verankert werden.Danke, dass du das für mich eingefangen hast, ich habe die Antwort aktualisiert, um die richtige Regex zu setzen. –

+0

Es hat so lange gedauert, bis ich darauf zurückkam. Danke für die tolle Antwort! Ich musste nur eine kleine Korrektur machen. '' \ s + $ '' braucht ein extra ''', um es richtig zu entkommen. – jasonh

+0

@jasonh: Sie haben Recht, ich habe die Antwort aktualisiert, danke. –

10

Es ist kein direkter Ersatz. Sie können Regexps oder vielleicht Commons Lang StringUtils.stripEnd() Methode verwenden.

+3

+1 für StringUtils. Zusätzlich zu trimXXX bieten sie auch stripXXX an, das Unicode-Leerzeichen korrekt verarbeitet (trim only/trimmt auch ASCII-Steuercodes). – Thilo

2

Es gibt keine native Äquivalent. Verwenden Sie diese Option:

public static String trimEnd(String s, String suffix) { 

if (s.endsWith(suffix)) { 

    return s.substring(0, s.length() - suffix.length()); 

} 
return s; 
} 
+3

sollten Sie in einer Schleife überprüfen. Es ist möglich, dass das Suffix zweimal oder öfter am Ende steht. – xmen

5

, wenn Sie Wert Leistung (vielleicht Ihre Methode in einer Schleife über Tausende von Zeichenketten verwendet wird), als Sie diese Methode verwenden könnte:

public String trimEnd(String value) { 
    int len = value.length(); 
    int st = 0; 
    while ((st < len) && value.charAt(len - 1) == ' ') { 
     len--; 
    } 
    return value.substring(0, len); 
} 
+0

Wenn Sie auch Tabs und andere Leerzeichen haben, ersetzen Sie '... == '' mit [' Character.isWhitespace (...) '] (http://docs.oracle.com/javase/7/docs/ api/java/lang/Character.html # isWhitespace% 28char% 29). –

0

Wenn die Leistung ist nicht wichtig ein- Liner könnte verwendet werden:

("X" + str).trim().substring(1) 
0

Ich mag googles Version von Guava.

import static com.google.common.base.CharMatcher.WHITESPACE; 

WHITESPACE.trimTrailingFrom(value); 

oder

CharMatcher.anyOf(suffix).trimTrailingFrom(value); 

wenn Sie Maven verwenden, können Sie es einfach auf Ihre Abhängigkeiten Abschnitt pom.xml hinzufügen.