str.split("|");
означает что-то другое.
String#split
использует regex , а|
- метасимвол, поэтому строка означает: отделить пустую строку или от пустой строки. Вот почему ваша строка делится на каждый символ.Есть несколько способов делать то, что вы ожидаете (использовать их как строку для разделения):
"\\|"
Это означает, что для избежания метасимвола.
"[|]"
Помещает метасимвол в класс символов.
"\\Q|\\E"
Помещает метасимвол в цитату