Официальная документация Java гласит:
Строка "boo:and:foo"
, например, дает следующие результаты с этими выражениями 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<
Почему это происходит?
Ответы:
Тебе нужно
split
использует регулярное выражение и в регулярном выражении|
является метасимволом, представляющимOR
оператор. Вы должны экранировать этот символ, используя\
(написанный в String, так"\\"
как\
он также является метасимволом в литералах String и требует другого\
для экранирования).Вы также можете использовать
и позвольте
Pattern.quote
создать экранированную версию представления регулярного выражения|
.источник
split()
метод принимает регулярное выражение и|
является специальным символом для рег эксИспользуйте правильное экранирование:
string.split("\\|")
Или, в Java 5+, используйте помощник,
Pattern.quote()
который был создан именно для этой цели:который работает с произвольными входными строками. Очень полезно, когда вам нужно процитировать / экранировать пользовательский ввод.
источник
Pattern.quote()
.Используйте этот код:
источник
Вы также можете использовать библиотеку apache и сделать это:
источник
Вы также можете использовать
.split("[|]")
.(Я использовал это вместо
.split("\\|")
, что не работает для меня.)источник
Указание лимита или максимума будет точным для примеров, таких как: "boo ||| a" или "|| boo |" или "|||"
Но
test.split("\\|");
вернет массивы строк разной длины для тех же примеров.используйте ссылку: ссылка
источник
метод split () принимает регулярное выражение в качестве аргумента
источник