2009-08-20 14 views
11

Powiedzmy mieć ciąg ...String Podział pytanie używając "*"

String myString = "my*big*string*needs*parsing"; 

Wszystko czego chcę to dostać podzielić ciąg w "moim", "duży", "string", etc. więc staram

myString.split("*"); 

Przywraca java.util.regex.PatternSyntaxException: Zwisając charakter meta '*' w pobliżu indeksu 0

* jest specjalny znak w regex więc spróbuj uciekać ...

myString.split("\\*"); 

Ten sam wyjątek. Pomyślałem, że ktoś będzie znał szybkie rozwiązanie. Dzięki.

+0

swojej prawej \\ * działa, używałem go z tablicy ... myArray [x] .split ("\\ * "); i to było wyrzucanie wyjątku, ale jeśli najpierw zmienię myArray [x] na ciąg, a potem uruchomię to działa ... dziękuję za odpowiedzi :) – OHHAI

+0

mam na myśli podwójne \ w powyższym komentarzu .... – OHHAI

+0

Umysł dając zamknięcie tego pytania, wybierając poprawną odpowiedź? – extraneon

Odpowiedz

16

split("\\*") współpracuje ze mną.

+0

\\ * działa również dla mnie! –

0

myString.split("\\*"); działa dobrze na Javie 5. Którego środowiska JRE używasz.

+0

Pojedyncza kreska nie zadziała; \ * nie jest znakiem specjalnym. Myślę, że zrobiłeś literówkę :) – extraneon

5

Jeden ucieczka \ nie załatwi w Javie 6 na Mac OSX, jak \ jest zarezerwowana dla \b \t \n \f \r \'\" i \\. Co masz wydaje się działać dla mnie:

public static void main(String[] args) { 
    String myString = "my*big*string*needs*parsing"; 
    String[] a = myString.split("\\*"); 
    for (String b : a) { 
     System.out.println(b); 
    } 
} 

wyjścia:

mój
duży
ciąg
potrzebuje
parsowania

0

Można również użyć StringTokenizer.

StringTokenizer st = new StringTokenizer("my*big*string*needs*parsing", "\*"); 
while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
} 
0

Dzieje się tak, ponieważ metoda podziału przyjmuje wyrażenie regularne, a nie zwykły ciąg znaków.

Znak "*" oznacza, że ​​poprzedni znak jest równy zero lub więcej razy, dlatego nie można go samodzielnie określić.

Tak powinno być uciekł, jak po

split("\\*")