2014-10-23 9 views
6

Sto leggendo in un file in Java e desidero dividere ogni riga in base al valore racchiuso tra virgolette. Ad esempio, una linea sarebbe ...Divisione di una stringa in base al valore tra virgolette in Java

"100", "questo, è", "a", "test"

vorrei la matrice a guardare come ..

[0] = 100 
[1] = this, is 
[2] = a 
[3] = test 

Normalmente divido per virgola, ma poiché alcuni dei campi includono una virgola (posizione 1 nell'esempio sopra) non è proprio adatta.

Grazie.

+0

L'(regex String) String.split utilizza il metodo un'espressione regolare come argomento, quindi usa una regex che corrisponda a "" qualcosa "" non sicura del to p della mia testa ma qualcuno ti darà la risposta abbastanza presto – Neilos

+0

rimuovi il primo e l'ultimo carattere "" 'e poi lo dividi in' "," ' – user902383

+0

sì, sono un po 'confuso riguardo alle virgole nel suo esempio, non l'ho fatto t vederlo 1 – Neilos

risposta

2

È possibile effettuare le seguenti

String yourString = "\"100\",\"this, is\",\"a\",\"test\""; 
    String[] array = yourString.split(",\""); 
    for(int i = 0;i<array.length;i++) 
     array[i] = array[i].replaceAll("\"", ""); 

Infine matrice variabile sarà la matrice desiderata

uscita:

100 
    this, is 
    a 
    test 
+0

Terminato usando questo, ha funzionato come un incantesimo!Grazie a tutti. – user3722194

2

Ecco un modo semplice:

String example = "\"test1, test2\",\"test3\""; 
int quote1, quote2 = -1; 
while((quote2 != example.length() - 1) && quote1 = example.indexOf("\"", quote2 + 1) != -1) { 
    quote2 = example.indexOf("\"", quote1 + 1); 
    String sub = example.substring(quote1 + 1, quote2); // will be the text in your quotes 
} 
+0

Con un nome più eloquente di "a" e un esempio di stringa, in modo che lo snippet sia eseguibile e in modo da poter fornire l'output di esempio, sarebbe perfetto ;-) – LionC

2

È possibile dividere la seguente modo:

String input = "\"100\",\"this, is\",\"a\",\"test\""; 
for (String s:input.split("\"(,\")*")) { 
    System.out.println(s); 
} 

uscita

100 
this, is 
a 
test 

Nota Il primo ar l'elemento raggio sarà vuoto.

0

rapido e sporco, ma funziona:

String s = "\"100\",\"this, is\",\"a\",\"test\""; 
    StringBuilder sb = new StringBuilder(s); 
    sb.deleteCharAt(0); 
    sb.deleteCharAt(sb.length()-1); 
    String [] buffer= sb.toString().split("\",\""); 
    for(String r : buffer) 
     System.out.println(r); code here 
+0

invece di convertire la stringa in StringBuilder, è possibile utilizzare il metodo di sottostringa sulla stringa – user902383

+0

, ma ho pensato che fosse più facile da capire con un metodo esplicito come 'deleteCharAt' – ortis

0

Ecco un modo utilizzando un'espressione regolare.

public static void main (String[] args) { 
    String s = "\"100\",\"this, is\",\"a\",\"test\""; 
    String arr[] = s.split(Pattern.quote("\"\\w\""))); 
    System.out.println(Arrays.toString(arr)); 
} 

uscita:

["100","this, is","a","test"] 

Ciò che fa è gli incontri:

\" -> start by a " 
    \\w -> has a word character 
    \" -> finish by a " 

Io non so che tipo di valori che hai, ma è possibile modificarlo come avete bisogno.