2011-10-18 11 views

risposta

-1

Prima divisa per virgolette:

String s = 'Location "Welcome to india" Bangalore Channai "IT city" Mysore'; 
String[] splitted = s.split('"'); 

poi diviso con spazi ogni stringa nella matrice tagliuzzati

for(int i = 0; i< splitted.length; i++){ 
    //split each splitted cell and store in your arraylist 
} 
+2

Ma allora 'a b \" c d \ "' verrebbe diviso in '" a b "' e '" c d "', giusto? Come stabiliresti quale di questi si suddividerà ulteriormente? – aioobe

+0

Hai ragione. beh, puoi usare StringTokenizer e mantenere il separatore per il primo passo, e poi controllare il token (\ "o una stringa) per determinare se ulteriore split o no. –

+0

Ho visto StringTokenizer, e fa molto affidamento su * delimitatori *, cosa utilizzeresti come delimitatore in questo caso? – aioobe

107

Ecco come:

String str = "Location \"Welcome to india\" Bangalore " + 
      "Channai \"IT city\" Mysore"; 

List<String> list = new ArrayList<String>(); 
Matcher m = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(str); 
while (m.find()) 
    list.add(m.group(1)); // Add .replace("\"", "") to remove surrounding quotes. 


System.out.println(list); 

uscita:

[Location, "Welcome to india", Bangalore, Channai, "IT city", Mysore] 

L'espressione regolare dice semplicemente

  • [^"]           - gettone di iniziare con qualcosa di diverso "
  • \S*             - seguito da zero o più caratteri non-spazio
  • ... o ...
  • ".+?"       - un " - simbolo seguito da qualsiasi cosa, fino a un altro ".
+0

Posizione, "Welcome to india", Bangalore, Channai, "IT city", Mysore è una stringa che sto inserendo in formato jsp, dopo averla inviata dovrebbe essere divisa come è menzionato nella domanda – user1000535

+0

la doppia citazione non dovrebbe ci sia – user1000535

+3

Ah, cambia 'm.group (1)' in 'm.group (1) .replace (" \ "", "") '. – aioobe

Problemi correlati