Не уверен, как в этом случае работает срыв строк
Я не получаю следующее:
В следующем String
:
String s = "1234;x;;y;";
если я это сделаю:
String[] s2 = s.split(";");
Я получаю s2.length
равным 4 и
s2[0] = "1234";
s2[1] = "x";
s2[2] = "";
s2[3] = "y";
Но в строке: String s = "1234;x;y;;";
Я получаю:
s2.length
должно быть 3 и
s2[0] = "1234";
s2[1] = "x";
s2[2] = "y";
?
В чем разница, и я не получаю 4 в последнем случае?
UPDATE:
Использование -1
не было, я ожидал как поведение.
Я имею в виду, что последняя точка с запятой - это конец String
, поэтому в последнем примере я также ожидал 4
как длину массива
Ответы
Ответ 1
Из docs,
Этот метод работает, как если бы вы вызывали метод разделения с двумя аргументами с помощью данное выражение и предельный аргумент нуля. Трейлинг пустой поэтому строки не включены в результирующий массив.
UPDATE:
У вас есть пять подстрок, разделенных символом ;
. Во втором случае это 1234
, x
, y
,
и
. Согласно документам, все пустые подстроки (в конце), которые являются результатом операции разделения, будут устранены.
Подробнее см. здесь.
Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину и завершать пустые строки будут отброшены.
Строка boo:and:foo
, например, дает следующие результаты с этими параметрами:
Regex Limit Result
: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" } // all the empty substrings at the end were eliminated
Ответ 2
Пропущенные пустые строки опущены. Если вам это нужно, используйте подход, описанный в http://www.xinotes.org/notes/note/226/
Ответ 3
Из http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)
Этот метод работает, как если бы он вызывал метод разделения с двумя аргументами с заданным выражением и предельным аргументом нулевого. Поэтому конечные пустые строки не включаются в результирующий массив.
Ответ 4
Хороший вопрос. Если вы проверите документацию по API для String.split()
и проверьте пример с помощью "boo: foo", вы увидите, что завершающие пустые строки опущены,
Этот метод работает, как если бы он вызывал метод разделения с двумя аргументами с заданным выражением и предельным аргументом нулевого. Поэтому конечные пустые строки не включаются в результирующий массив.
Строка "boo: and: foo", например, дает следующие результаты с этими выражениями:
Результат выражения
: { "boo", "and", "foo" }
o { "b", ",": и: f"}
Ответ 5
Это поведение по умолчанию метода split в java, чтобы не возвращать пустые токены. ]
s.split( "\;", -1); должен возвращать пустой токен
Ответ 6
Почему бы не проверить, что говорит первая документация. Вот ссылка:
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29
И вот ваш ответ:
Таким образом, конечные пустые строки не включаются в массив.