2013-05-13 18 views
6

Mam przypadek, w którym mam następujący sposób:podziału String po znaku

final String[] columns = row.split(delimiter.toString()); 

Gdzie delimiter to postać.

Działa to dobrze, gdy trzeba podzielić na podstawie kart, podając \t jako ogranicznik. Jednak gdy chcę podzielić na potoku, przechodzę w ogranicznik | i nie działa zgodnie z oczekiwaniami.

Przeczytałem kilka postów o tym, jak | jest specjalną postacią, która oznacza pustą lub pustą, a więc dzieli się na każdej napotkanej postaci, jednak nie chcę tego zachowania.

mogłem zrobić prostą kontrolę w moim kodu dla tego przypadku rur i ominąć kwestii:

if ("|".equals(delimiter.toString())) { 
    columns = row.split("\\" + delimiter.toString()); 
} 
else { 
    columns = row.split(delimiter.toString()); 
} 

Ale nie wiem, czy istnieje prostszy sposób, aby obejść ten problem. Czy są jakieś inne specjalne znaki, które zachowują się jak |, które muszę wziąć pod uwagę?

Odpowiedz

18

Spróbuj:

import java.util.regex.Pattern; 

... 

final String[] columns = row.split(Pattern.quote(delimiter.toString())); 

W odniesieniu do innych metaznakami, jak są one nazywane, oto cytat z samouczka String Literals:

Ten interfejs API obsługuje również szereg specjalnych znaki, które wpływają na sposób dopasowania wzorca.

...

Metaznaki obsługiwany przez ten interfejs API to: < ([{\^- = $ |!]}) * +>

Patrz:?.

+0

Dzięki, że działało idealnie. Przyjmuję za 11 minut. –

4
  1. Można użyć StringUtils z Apache Commons Lang, który jest wyposażony metod przyjmowania zwykły tekst, wyrażeń nie regularnych:

    public static String[] split(String str, char separatorChar) 
    public static String[] split(String str, String separatorChars) 
    
  2. Można również użyć klasy StringTokenzier, który nie spodziewa wyrażenie regularne jako ogranicznik.

Powiązane problemy