Смугайте провідні та кінцеві простори з рядка Java


278

Чи є зручний метод зняти будь-які провідні чи кінцеві пробіли з рядка Java?

Щось на зразок:

String myString = "  keep this  ";
String stripppedString = myString.strip();
System.out.println("no spaces:" + strippedString);

Результат:

no spaces:keep this

myString.replace(" ","") замінить простір між Keep і цим.


7
Це прикро, але це означає, що відповіді тут були корисні людям. Я підтримував лише цю причину.
Алекс Д

11
Хоча це може бути дублікат, це набагато краще представлене питання. Якщо що-небудь, інший повинен бути близьким як дублікат цього.
thecoshman

1
Я змінив дублікати, тому що в цьому питанні є набагато більше переглядів та вибраних, а інші питання та відповіді - це фактично налагоджувальне питання.
Radiodef

1
Відповів на рішення JDK / 11 API - String.stripна це.
Наман

Відповіді:


601

Можна спробувати метод обрізки ().

String newString = oldString.trim();

Погляньте на javadocs


1
Працює як зворотно сумісна заміна для String.strip (11) Java 11. Я не встиг дослідити найтонші відмінності.
Йосія Йодер

80

Використовуйте String#trim() метод або String allRemoved = myString.replaceAll("^\\s+|\\s+$", "")для обрізки обох кінців.

Для лівої обрізки:

String leftRemoved = myString.replaceAll("^\\s+", "");

Для правильної обрізки:

String rightRemoved = myString.replaceAll("\\s+$", "");

3
Це має додаткову перевагу в тому, що ми можемо сказати, скільки провідних / кінцевих пробілів у рядку.
Błażej Czapp


18

trim () - це ваш вибір, але якщо ви хочете використовувати replaceметод - який може бути більш гнучким, ви можете спробувати наступне:

String stripppedString = myString.replaceAll("(^ )|( $)", "");

чим все це замінює? Простори та нові рядки, можливо?
Хтось десь

Я шукав рішення просто видалити пробіли, але не провідні пробіли. Я використав: str.replaceAll ("\\ s * $", "") Дякую!
Ліза с.

4

З Java-11 і вище ви можете використовувати String.stripAPI, щоб повернути рядок, значенням якої є ця рядок, при цьому всі провідні та кінцеві пробіли видалено. Явадок для тих же читає:

/**
 * Returns a string whose value is this string, with all leading
 * and trailing {@link Character#isWhitespace(int) white space}
 * removed.
 * <p>
 * If this {@code String} object represents an empty string,
 * or if all code points in this string are
 * {@link Character#isWhitespace(int) white space}, then an empty string
 * is returned.
 * <p>
 * Otherwise, returns a substring of this string beginning with the first
 * code point that is not a {@link Character#isWhitespace(int) white space}
 * up to and including the last code point that is not a
 * {@link Character#isWhitespace(int) white space}.
 * <p>
 * This method may be used to strip
 * {@link Character#isWhitespace(int) white space} from
 * the beginning and end of a string.
 *
 * @return  a string whose value is this string, with all leading
 *          and trailing white space removed
 *
 * @see Character#isWhitespace(int)
 *
 * @since 11
 */
public String strip()

Вибірка таких випадків може бути:

System.out.println("  leading".strip()); // prints "leading"
System.out.println("trailing  ".strip()); // prints "trailing"
System.out.println("  keep this  ".strip()); // prints "keep this"

PS : Міграція відповіді тут на основі коментарів від - stackoverflow.com/questions/3796121/…
Наман


0

Для обрізки конкретних символів можна скористатися:

String s = s.replaceAll("^(,|\\s)*|(,|\\s)*$", "")

Тут буде викреслено провідний і кінцевий пробіл і кома .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.