Как разбить строку с пробелами в начале? - PullRequest
7 голосов
/ 01 ноября 2011

Быстрый пример:

public class Test {
    public static void main(String[] args) {
        String str = "   a b";
        String[] arr = str.split("\\s+");
        for (String s : arr)
            System.out.println(s);
    }
}

Я хочу, чтобы массив arr содержал 2 элемента: "a" и "b", но в результате есть 3 элемента: "" (пустая строка), "a" и "b". Что я должен сделать, чтобы сделать это правильно?

Ответы [ 4 ]

4 голосов
/ 01 ноября 2011

Вид чита, но заменить:

String str = "   a b";

с

String str = "   a b".trim();
2 голосов
/ 01 ноября 2011

Другой способ обрезать его - использовать взгляд вперед и оглядываться назад, чтобы убедиться, что пробел расположен между двумя непробельными символами ... что-то вроде:

String[] arr = str.split("(?<=\\S)\\s+(?=\\S)");

Проблема в том, что он не обрезает начальные пробелы, давая такой результат:

   a
b

но не должен, так как String#split(...) для расщепления, а не обрезки.

1 голос
/ 01 ноября 2011

Простым решением является использование trim() для удаления начальных (и конечных) пробелов перед split(...) вызовом.

Вы не можете сделать это с помощью split(...).Разделенное регулярное выражение соответствует строке разделители ;т.е. обязательно будет подстрока (возможно, пустая) до и после каждого соответствующего разделителя.

Вы можете справиться со случаем, когда пробел находится в конце, используя split(..., 0).Это отбрасывает любые завершающие пустые строки.Однако не существует эквивалентной формы split для отбрасывания ведущих пустых строк.

0 голосов
/ 01 ноября 2011

Вместо обрезки вы можете просто добавить if, чтобы проверить, пустая строка или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...