Не удается получить примеры регулярных выражений в разделении строк - PullRequest
2 голосов
/ 16 февраля 2012

Я не могу получить эти примеры из учебника SUN по String split :

например. для "boo:and:foo"

Regex   Limit   Result  

o   5   { "b", "", ":and:f", "", "" }  
o   -2  { "b", "", ":and:f", "", "" }  
o   0   { "b", "", ":and:f" }  

Я не могу понять результат.
Я читал, что для отрицательного предела шаблон применяется столько раз, сколько возможно, а для положительного предела - n-1 раз и т. Д.

Но я не могу понять, как формируется результирующий массив в каждом случае.

например. в первом случае, почему у нас есть 1 "" в расположении 1, но 2 "" в местоположениях 3 и 4?
То же самое в остальном.

Любая помощь?

Ответы [ 2 ]

5 голосов
/ 16 февраля 2012

Дело 1:

довольно прямо

шаг 1: работа с boo: and: foo

"b"  and  "o:and:foo"

шаг 2: работа с o: и: foo

"" and ":and:foo"

шаг 3: работа с : и: foo

":and:f" and "o"

шаг 4: работа с o

""  and ""

Случай 2: это отрицательный предел, поэтому он пытается применить шаблон «о» столько раз, сколько возможно. Следовательно, как и выше. После этого у нас остаются две пустые строки и больше нет разделения для применения.

Случай 3: 0, который аналогичен случаю 2, но отбрасывает завершающие пустые строки. Следовательно, он отбрасывает последние две строки

3 голосов
/ 16 февраля 2012

Давайте начнем с понимания всех возможных расколов. Я думаю "b" и ":and:f" понятны.

Пустые строки возникли в результате разделения между o (fo-""-o, bo-""-o) и разделения после последнего o - до конца строки, что снова - пустая строка.

Итак, у нас есть 5 подходящих строк, которые может вернуть разделение.

Если мы разбиваем с использованием 5 - мы возвращаем не более 5 подстрок, что в точности равно 5 подстрокам, которые у нас есть, в результате получается первый вывод:

Если предел n больше нуля, то шаблон будет применен самое большее n - 1 раз, длина массива будет не больше чем n, и последняя запись массива будет содержать все входные данные, кроме последнего соответствующего Разделитель

Если мы разделим, используя -2, мы вернем как можно больше [что в данном случае идентично 5]:

Если n не положительно, то шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину

Если мы разделяем, используя 0, мы возвращаем столько, сколько возможно - но мы отбрасываем все завершающие пустые строки:

Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину и конечные пустые строки будут отброшены

Примечание: Если вы хотите игнорировать пустые строки между вхождениями o, вы должны разделить их с помощью регулярного выражения "o+" - которое занимает как можно больше o, что приводит в пустых строках между o х

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