2013-05-16 3 views
9

Quando si eseguecaso insensitive String split() metodo

String test="23x34 "; 
String[] array=test.split("x"); //splitting using simple letter 

Ho due elementi in array come 23 e 34

, ma quando l'ho fatto

String test="23x34 "; 
String[] array=test.split("X"); //splitting using capitalletter 

ho ottenuto un elemento in array 23x34

Quindi c'è un modo per utilizzare il metodo split come case sensitive o se esiste un altro metodo che può aiutare?

risposta

14

Usa regex modello [xX] in split

String x = "24X45"; 
String[] res = x.split("[xX]"); 
System.out.println(Arrays.toString(res)); 
+0

grazie funziona. –

36

split usi, come la documentazione suggerisce, un'espressione regolare. un'espressione regolare per il vostro esempio potrebbe essere:

"[xX]" 

Inoltre, la bandiera (?i) alterna caso insensitivty. Pertanto, quanto segue è anche corretto:

"(?i)x" 

In questo caso, può essere qualsiasi x letterale correttamente sfuggito.

+0

downlocoter si prega di commentare. – njzk2

+3

+1: per '(? I)'. – wchargin

+1

+1 per '(? I)', può essere usato per le frasi. Es: 'String [] array =" 24xXx45 ".split (" (? I) XXX "); // [24, 45] ' –

7

È inoltre possibile utilizzare una bandiera incorporato nel tuo regex:

String[] array = test.split("(?i)x"); // splits case insensitive 
-1

si potrebbe usare un espressione regolare come argomento per split, in questo modo:

"32x23".split("[xX]"); 

Oppure si potrebbe usare un StringTokenizer che ti permette di impostare il suo insieme di delimitatori, in questo modo:

StringTokenizer st = new StringTokenizer("32x23","xX"); 
//           ^^ ^^ 
//          string delimiter 

Questo ha il vantaggio che se si desidera creare l'elenco di delimitatori in modo programmatico, ad esempio per ciascuna lettera minuscola nell'elenco delimitatore, aggiungere il corrispondente maiuscolo, è possibile farlo e quindi passare il risultato allo StringTokenizer.

2

Io personalmente preferisco utilizzare

String modified = Pattern.compile("x", Pattern.CASE_INSENSITIVE).matcher(stringContents).replaceAll(splitterValue); 
String[] parts = modified.split(splitterValue); 

In questo modo è possibile garantire qualsiasi regex funzionerà, fino a quando si dispone di un valore di splitter unico