2013-05-13 11 views
6

Ho un caso in cui sto facendo quanto segue:Split stringa di caratteri

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

Dove delimiter è un personaggio.

Questo funziona correttamente quando è necessario dividere in base alle schede fornendo \t come delimitatore. Tuttavia, quando voglio dividere una pipe, passo in un delimitatore di | e questo non funziona come previsto.

Ho letto diversi post su come | è un carattere speciale che significa nullo o vuoto, quindi si divide su ogni personaggio che incontra, tuttavia, non voglio questo comportamento.

ho potuto fare un semplice controllo nel mio codice per questo caso tubo e aggirare il problema:

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

Ma non sapevo se ci fosse un modo più semplice per aggirare questo. Inoltre, ci sono altri caratteri speciali che si comportano come lo | che devo prendere in considerazione?

risposta

18

Prova:

import java.util.regex.Pattern; 

... 

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

Per quanto riguarda gli altri metacaratteri, come si chiamano, ecco una citazione dal String Literals tutorial:

Questa API supporta anche una serie di speciale caratteri che influenzano il modo in cui un modello è abbinato.

...

I metacaratteri supportati da questa API sono: < ([{\^- = $ |!]}) * +>

See:?.

+0

Grazie, ha funzionato perfettamente. Accetterò tra 11 minuti. –

4
  1. È possibile utilizzare StringUtils da Apache Commons Lang che è dotato di metodi di accettare solo testo, le espressioni non regolari:

    public static String[] split(String str, char separatorChar) 
    public static String[] split(String str, String separatorChars) 
    
  2. È inoltre possibile utilizzare la classe StringTokenzier, che non si aspetta un'espressione regolare come il delimitatore.