2014-09-05 4 views
39

Как можно обрезать ведущие или завершающие символы из строки в java?Java - Обрезать ведущие или завершающие символы из строки?

Например, символ косой черты «/» - меня не интересуют пробелы, и я собираюсь обрезать либо ведущие, либо завершающие символы в разное время.

ответ

51

Вы можно использовать

Ведущий:

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

Продольный:

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

, который, кажется, работает хорошо ... вы можете [проверить его онлайн здесь] (http://ideone.com/shHHV9) –

+0

Как происходит волшебство? Это просто replaceAll afterall. –

25

Вы можете использовать Apache StringUtils.stripStart, чтобы обрезать ведущие символы, или StringUtils.stripEnd, чтобы обрезать завершающие символы.

Например:

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

выведет:

тест/меня

Обратите внимание, что если по каким-то причинам вы не можете использовать всю библиотеку StringUtils, вы могли бы просто удалите соответствующие части, as detailed here:

+1

Это замечательно! –

1

Моя версия подрезки передней и/или задней строки s от ул String. Оба аргумента могут быть нулевыми. Когда str не имеет ведущих и/или конечных s, он не изменяется.

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; 
} 
2

Вы можете использовать простую итерацию, если вы хотите, чтобы удалить ведущие символы из строки:

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

же логика применима, если вы хотите удалить какие-либо заднюю char.

0

уравновешивания с Character, String или Regex

Если время выполнения не является большой проблемой для вас, то этот код окажется действительно полезным.

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