Разбиение строки Java по символу канала с использованием split («|»)

Официальная документация Java гласит:

Строка"boo:and:foo", for example, yields the following results with these expressions Regex Result :

{ "boo", "and", "foo" }"

И мне нужно, чтобы это работало. Однако, если я запускаю это:

public static void main(String[] args){
        String test = "A|B|C||D";

        String[] result = test.split("|");

        for(String s : result){
            System.out.println(">"+s+"<");
        }
    }

это печатает:

><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<

Что далеко от того, что я ожидал:

>A<
>B<
>C<
><
>D<

Почему это происходит?

 KIBOU Hassan02 мая 2017 г., 15:13
Возможный дубликатHow to split a string in Java

Ответы на вопрос(7)

test.split("\\|",999);

Указываяlimit или макс будетaccurate для примеров, таких как: «Boo ||| a» или & quot; | boo | & quot; или & quot; ||| & Quot;

Ноtest.split("\\|"); вернет массивы строк разной длины для одних и тех же примеров.

используйте ссылку:ссылка на сайт

Используйте этот код:

public static void main(String[] args) {
    String test = "A|B|C||D";

    String[] result = test.split("\\|");

    for (String s : result) {
        System.out.println(">" + s + "<");
    }
}
 14 янв. 2017 г., 17:29
Это решение уже указано принятым ответом. Не нужно повторять это.

метод split () принимает регулярное выражение в качестве аргумента

Вы также можете использовать библиотеку apache и сделать это:

StringUtils.split(test, "|");
Решение Вопроса

Тебе нужно

test.split("\\|");

split использует регулярное выражение и вregex | метасимвол, представляющийOR оператор. Вы должны убежать от этого персонажа, используя\ (написано в строке как"\\" поскольку\ также является метасимволом в строковых литералах и требует другого\ чтобы избежать этого).

Вы также можете использовать

test.split(Pattern.quote("|"));

и разрешиPattern.quote создать экранированную версию регулярного выражения, представляющего|.

 19 нояб. 2016 г., 12:11
Вы мой второй выбор в качестве модератора переполнения стека. Всего наилучшего.
 29 мая 2012 г., 11:16
Это,split() метод принимает регулярные выражения и| это специальный символ для рег экс

Используйте правильное экранирование:string.split("\\|")

Или помощникPattern.quote() который был создан именно для этой цели:

string.split(Pattern.quote("|"))

который работает с произвольными входными строками. Очень полезно, когда вам нужно процитировать / экранировать пользовательский ввод.

 24 янв. 2016 г., 17:42
Не уверен, когда переход был сделан, но в Java 8 можно было бы использоватьPattern.quote().

Вы также можете использовать.split("[|]").

(Я использовал это вместо.split("\\|"), который не работал для меня.)

Ваш ответ на вопрос