Oficjalna dokumentacja Java mówi:
Na "boo:and:foo"
przykład ciąg daje następujące wyniki z tymi wyrażeniami Wynik wyrażenia regularnego:
{ "boo", "and", "foo" }"
I tak potrzebuję go do działania. Jeśli jednak uruchomię to:
public static void main(String[] args){
String test = "A|B|C||D";
String[] result = test.split("|");
for(String s : result){
System.out.println(">"+s+"<");
}
}
drukuje:
><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<
Co jest dalekie od tego, czego bym się spodziewał:
>A<
>B<
>C<
><
>D<
Dlaczego to się dzieje?
Odpowiedzi:
Potrzebujesz
split
używa wyrażenia regularnego, a regex|
to metaznak reprezentującyOR
operator. Musisz uciec przed tym znakiem za pomocą\
(napisanego w String, ponieważ"\\"
od tego czasu\
jest także metaznakiem w literałach String i wymaga innego,\
aby go uciec).Możesz także użyć
i pozwólmy
Pattern.quote
utworzyć ucieczkową wersję wyrażenia regularnego|
.źródło
split()
metoda wykonuje regex i|
ma szczególny charakter dla reg exUżyj właściwego ucieczki:
string.split("\\|")
Lub, w Javie 5+, użyj pomocnika,
Pattern.quote()
który został stworzony właśnie w tym celu:który działa z dowolnymi ciągami wejściowymi. Bardzo przydatne, gdy trzeba zacytować / uciec od danych wejściowych użytkownika.
źródło
Pattern.quote()
.Użyj tego kodu:
źródło
Możesz również użyć biblioteki apache i zrobić to:
źródło
Możesz także użyć
.split("[|]")
.(Użyłem tego zamiast
.split("\\|")
, co nie działało dla mnie.)źródło
Określenie limitu lub maksimum będzie dokładne dla przykładów takich jak: „boo ||| a” lub „|| boo |” lub „|||”
Ale
test.split("\\|");
zwróci tablice łańcuchów o różnych długościach dla tych samych przykładów.użyj referencji: link
źródło
Metoda split () przyjmuje jako argument wyrażenie regularne
źródło