Не уверен, как в этом случае работает срыв строк - программирование
Подтвердить что ты не робот

Не уверен, как в этом случае работает срыв строк

Я не получаю следующее:

В следующем 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 как длину массива

4b9b3361

Ответ 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); должен возвращать пустой токен