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

179

Официальная документация 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<

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

Возможный дубликатHow to split a string in Java KIBOU Hassan

Ваш Ответ

7   ответов
-2

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

2

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

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

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

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

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

383

Тебе нужно

test.split("\\|");

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

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

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

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

Это,split() метод принимает регулярные выражения и| это специальный символ для рег экс
Вы мой второй выбор в качестве модератора переполнения стека. Всего наилучшего.
4

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

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

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

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

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

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

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

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

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

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

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

Похожие вопросы