2010-01-27 3 views
12

В процессе преобразования приложения C# в Java я столкнулся с использованием метода String TrimEnd. Существует ли эквивалентная реализация Java? Кажется, я не могу найти его.TrimEnd для Java?

Я бы предпочел не заменять его trim, так как я не хочу менять значение или действие программы на этом этапе, если только не нужно.

ответ

23

Там нет прямого эквивалента, однако, если вы хотите, чтобы раздеть конечные пробела вы можете использовать:

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

\s является регулярным выражением набора символов «пробел», если вы заботитесь только о зачистках хвостовых пробелов, может заменить его символом пробела. Если вы хотите использовать более общую форму trimEnd(), то есть, чтобы удалить произвольный набор завершающих символов, то вам нужно изменить его немного использовать:

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

ли быть в курсе, что первый аргумент является родовым регулярное выражение , и поэтому, если один из ваших characters - это ], тогда это должен быть первый символ в вашем списке. Для полного описания шаблонов регулярных выражений java просмотрите the javadoc.

Если вы когда-нибудь понадобится для реализации trimstart() метода из .net, это почти то же самое, но будет выглядеть следующим образом:

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

@finnw: Вы правы ... регулярное выражение должно быть привязано.Спасибо, что поймали это для меня, я обновил ответ, чтобы установить правильное регулярное выражение. –

+0

Извините, мне потребовалось столько времени, чтобы вернуться к этому. Спасибо за отличный ответ! Мне просто пришлось сделать небольшую поправку. '' \ s + $ "'нуждается в дополнительном' '', чтобы правильно его избежать. – jasonh

+0

@ jasonh: Вы правы, я обновил ответ, спасибо. –

2

Вот трюк, чтобы сделать это с: http://www.overclock.net/coding-programming/320937-simple-java-trim-help.html

str = str.replaceAll(" +$", ""); 
+0

Обратите внимание, что это обрезает конечные пробелы. Изменение вариации Пауля Ваглана завершает пробельные символы. Метод C# использует массив «trimChars». –

+0

Это правда, +1 к Павлу. –

10

Существует не прямая замена. Вы можете использовать регулярные выражения, или, возможно, Commons Lang StringUtils.stripEnd().

+3

+1 для StringUtils. В дополнение к trimXXX, они также предлагают stripXXX, который правильно обрабатывает пробелы Unicode (только для обрезки/также обрезает управляющие коды ASCII). – Thilo

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

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/ апи/Java/языки/Character.html # isWhitespace% 28char% 29). –

0

Если производительность не важно один- может использоваться футеровка:

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

Мне нравится версия для googles от guava.

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> 
Смежные вопросы