2013-03-05 13 views
15

Dlaczego w poniższym przykładzie dane wyjściowe to [], a nie [1]?Dzielenie łańcucha z symbolem potoku jako separatorem

String input="1|2|3"; 
String[] values= input.split("|"); 
System.out.println("[" + values[0] + "]"); 
// Output: [] 

Jednakże, jeśli zmienimy separator, wyjście to [1].

String input="1;2;3"; 
String[] values= input.split(";"); 
System.out.println("[" + values[0] + "]"); 
// Output: [1] 
+0

'split (String) '' zajmuje regex ciąg' i jako takie '|' interpretowane jest jako "regex lub", więc nic nie dzieli. powinieneś przetestować, uciekając '|' i sprawdzając, czy wartości 'wartości' –

+1

podzieli każdy znak plus początkowy pusty ciąg znaków –

Odpowiedz

24

próby ucieczki ten znak:

String input="1|2|3"; 
String[] values= input.split("\\|"); 
System.out.println("[" + values[0] + "]"); 
15

Ponieważ | ma szczególne znaczenie w wyrażeniach regularnych. Musisz uciec to tak: \| w Javie trzeba także ucieczki backslash jak dobrze więc skończyć z \\|

postać rura jest operatorem alternatywy, co oznacza, że ​​opowiada silnik wyrażenie regularne do wyboru albo wzór po lewej i prawej stronie. W twoim przypadku te, w których puste ciągi pasują do czegokolwiek.

4

Spróbuj użyć \\| zamiast |, kiedy podzielisz się, ponieważ musisz uciec.

Więc twój kod będzie zmienić na:

String input="1|2|3"; 
String[] values= input.split("\\|"); 
System.out.println("[" + values[0] + "]"); 
+0

Nie skompiluje, sprawdź kod. W java musisz podwoić ucieczkę, podzielić ("\\ |"). –

+0

@ bmorris591 Odpowiedź została zmieniona. Przepraszam, że o tym zapomniałem! – aa8y

3

trzeba uciec znak '|' odpowiednio

String input="1|2|3"; 
     String[] values= input.split("\\|"); 
     System.out.println("[" + values[0] + "]"); 
-2

Znak potoku jest odpowiednikiem logicznego lub wyrażenia regularnego. Jeśli naprawdę chcesz używać znaku rury jako separator, trzeba uciec z \ jak w

String[] values= input.split("\|");

+1

To się nie skompiluje, sprawdź kod. W java musisz podwoić ucieczkę, 'split (" \\ | ")'. –

6

Sposób split odbiera regex jako parametr. Rura jest zastrzeżoną postacią mającą swój własny cel (to znaczy: or).

Można też uciec ("\\|") lub, jeśli jesteś w Java 1.5+ można używać Pattern.quote("|") takiego:

input.split(Pattern.quote("|")); 
Powiązane problemy