Alnitak верно, что конечные пустые строки будут отброшены по умолчанию.
Если вы хотите иметь завершающие пустые строки, вы должны использовать split(String, int)
и передать отрицательное число в качестве параметра limit
.
limit
Параметр контролирует количество раз применяется структура и, следовательно, влияет на длину результирующего массива. Если предел п больше нуля, то образец будет применяться в большинстве н - 1 раз, длина массива будет не больше, чем п, а последняя запись массива в будет содержать все ввод за пределы последнего согласованного разделителя. Если n не положителен, то шаблон будет применяться столько раз, сколько может быть , и массив может иметь любую длину.Если n равно нулю, то шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а конечные пустые строки будут отброшены.
Обратите внимание, что split(aString)
является синонимом split(aString, 0)
:
Этот метод работает, как если путем вызова двух аргументов split
метод с данным выражением и предельного аргумента нулю. Поэтому конечные пустые строки не включаются в результирующий массив.
Кроме того, вы должны использовать цикл для получения значений из массива; это позволяет избежать возможного ArrayIndexOutOfBoundsException
.
Таким образом, ваш исправленный код должен быть (если вы хотите замыкающих пустых строк):
String sample = "::";
String[] splitTime = sample.split(":", -1);
for (int i = 0; i < splitTime.length; i++) {
System.out.println("Value " + i + " : \"" + splitTime[i] + "\"");
}
Выход:
Value 0 : ""
Value 1 : ""
Value 2 : ""
Плохой совет. StringTokenizer будет рассматривать два двоеточия как один разделитель. В любом случае, StringTokenizer - это унаследованный класс; разработчикам рекомендуется использовать split(). –
Об использовании splitTime.length: в этом примере длина всегда будет равна нулю. Все «токены» были бы нитями нулевой длины, а StringTokenizer никогда не выдавал пустые токены. –