2010-01-27 26 views
12

在轉換C#應用程序到Java的過程中,我遇到了使用字符串的TrimEnd方法。有沒有一個等效的Java實現?我似乎無法找到一個。TrimEnd for Java?

我寧可不用trim代替它,因爲我不想在這一點上改變程序的含義或操作,除非必須。

回答

23

沒有直接等價的,但是如果你想要去除尾隨空白,你可以使用:

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

\s的正則表達式字符集「空白」,如果你只關心剝離尾部的空格,你可以用空格字符替換它。如果你想使用的trimEnd()的更一般的形式,那就是刪除尾隨的任意字符集,那麼你需要稍微修改它的使用方法:

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

請注意,第一個參數是一個通用的正則表達式,所以如果你的characters之一是]那麼這就需要你的列表中的第一個字符。有關java正則表達式模式的完整描述,請看the javadoc

如果你需要實現從.NET的trimstart()方法,它幾乎是相同的,但應該是這樣的:

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

@finnw:你是對的......正則表達式需要被錨定。感謝您爲我提供的信息,我已經更新了答案,以便輸入正確的正則表達式。 – 2010-01-27 12:59:08

+0

對不起,花了我很長的時間纔回到這裏。謝謝你的偉大答案!我只需要做一點小小的修改。 ''\ s + $''需要額外的'''來正確地轉義它。 – jasonh 2010-03-14 00:42:12

+0

@jasonh:你說的沒錯,我已經更新了答案,謝謝。 – 2010-03-16 10:16:27

10

沒有直接替換。你可以使用regexps,或者Commons Lang StringUtils.stripEnd()的方法。

+3

對於StringUtils爲+1。除了trimXXX,他們還提供stripXXX,它能夠正確處理Unicode空格(僅修剪/還修剪ASCII控制代碼)。 – Thilo 2010-01-27 01:37:53

2

沒有本地等價的。使用此:

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

if (s.endsWith(suffix)) { 

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

} 
return s; 
} 
+3

你應該檢查一個循環。後綴可能是兩次或更多。 – xmen 2015-06-02 08:33:11

5

如果值的性能(可能是在一個循環超過數千串用你的方法),比你可以使用此方法:

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

如果您還有選項卡和其他空格,請用''Character.isWhitespace(...)']替換'... =='''(http://docs.oracle.com/javase/7/docs/ API /爪哇/郎/ Character.html#isWhitespace%28char%29)。 – 2017-02-09 15:42:24

0

如果性能並不重要單襯墊可以使用:

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

我喜歡從番石榴的谷歌版本。

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

WHITESPACE.trimTrailingFrom(value); 

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

,如果你使用Maven,你可以把它添加到簡單的pom.xml的你的依賴部分。

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>23.0</version> 
</dependency>