Разбиение строки Java на символ канала с помощью split (“|”)

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

Это далеко не так, как я ожидал:

 >ABCD< 

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

Тебе нужно

 test.split("\\|"); 

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

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

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

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

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

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

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

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

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

 public static void main(String[] args) { String test = "A|B|C||D"; String[] result = test.split("\\|"); for (String s : result) { System.out.println(">" + s + "<"); } } 

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

 StringUtils.split(test, "|"); 

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

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

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

  • Как преобразовать целое число цвета в шестнадцатеричную строку в Android?
  • Что означает значение $ перед строкой?
  • Преобразование строки в C ++ в верхний регистр
  • Как найти и заменить строку?
  • Как написать безопасный для паролей class?
  • Почему метод String.length ()?
  • Каков тип строковых литералов в C и C ++?
  • Подсчитайте количество строк, появляющихся в строке
  • Разделить строку с разделителями на C
  • C # string replace не работает
  • Bootstrap 4.0 Макет компоновки сетки не работает
  • Давайте будем гением компьютера.