Java разделяет строку на массив

Мне нужна помощь с помощью метода split(). У меня есть следующий String:

String values = "0|0|0|1|||0|1|0|||";

Мне нужно поместить значения в массив. Возможны 3 строки: "0", "1" и ""

Моя проблема в том, что я пытаюсь использовать split():

String[] array = values.split("\\|"); 

Мои значения сохраняются только до последнего 0. Кажется, что часть "|||" обрезается. Что я делаю неправильно?

спасибо

Ответ 1

Это поведение явно описано в String.split(String regex) (внимание мое):

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

Если вы хотите включить эти завершающие пустые строки, вам нужно использовать String.split(String regex, int limit) с отрицательным значением для второго параметра (limit):

String[] array = values.split("\\|", -1);

Ответ 2

Попробуйте это

String[] array = values.split("\\|",-1); 

Ответ 3

Рассмотрим следующий пример:

public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real|How|To|||";
    System.out.println
       (java.util.Arrays.toString(testString.split("\\|")));
    // output : [Real, How, To]
  }
}

Результат не включает пустые строки между "|" разделитель. Чтобы сохранить пустые строки:

public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real|How|To|||";
    System.out.println
       (java.util.Arrays.toString(testString.split("\\|", -1)));
    // output : [Real, How, To, , , ]
  }
}

Для получения более подробной информации перейдите на этот сайт: http://www.rgagnon.com/javadetails/java-0438.html

Ответ 4

Ожидается. Обратитесь к Javadocs для split.

Splits this string around matches of the given regular expression.

Этот метод работает так, как если бы вы вызывали метод split (java.lang.String, int) с двумя аргументами с данным выражением и предельным аргументом нуля. Таким образом, конечные пустые строки не включаются в результирующий массив.