Quando provo a dividere una stringa con un delimitatore "|", sembra che divida ogni singolo carattere.Java - La stringa si divide per ogni carattere
Questa è la mia linea che è la causa del problema:
String out = myString.split("|");
Quando provo a dividere una stringa con un delimitatore "|", sembra che divida ogni singolo carattere.Java - La stringa si divide per ogni carattere
Questa è la mia linea che è la causa del problema:
String out = myString.split("|");
In regex, |
è un carattere riservato utilizzato per alternation. Devi scappare:
String out = string.split("\\|");
Nota che abbiamo usato due barre inverse. Questo perché il primo sfugge al secondo nella stringa Java, quindi la stringa passata al motore regex è \|
.
Credo che questo era già risposto in Java split string to array
In sintesi delle risposte nel link qui sopra:
String[] array = values.split("\\|",-1);
Questo perché:
Questo metodo funziona come se invocando il metodo
split
a due argomenti con l'espressione data e un argomentolimit
di zero. Le stringhe vuote finali non sono quindi incluse nell'array risultante.
split
prende un'espressione regolare, in cui |
è un carattere speciale. Hai bisogno di fuggire con un backslash. Ma il backslash è un carattere speciale nelle stringhe Java, quindi è necessario sfuggire anche a questo.
myString.split("\\|")
Oh grazie! Pensavo che uno sarebbe sfuggito con un backslash ma Android Studio mi ha detto che era un personaggio di fuga illegale, quindi ho pensato che non fosse necessario fuggire. Grazie! – Yharoomanner
Per chiarire, non è che il carattere '|' significhi una stringa vuota. Significa "o". È solo che questo significa che la regex nella domanda si traduce in "una stringa vuota o una stringa vuota". – yshavit
@Yharoomanner Si noti che la doppia barra rovesciata rappresenta un carattere barra retroversa nella stringa di input. Questo viene quindi passato al parser regex come stringa "\ |" che rappresenta un carattere di barra verticale. –