2010-09-26 21 views

risposta

35

Se si desidera utilizzare circuito maggiore, è possibile convertire la stringa charArray

for (char ch : exampleString.toCharArray()){ 
     System.out.println(ch); 
    } 
+7

Questo è molto peggio che la mia versione di copia il 'STRING' ad un array temporaneo che viene restituito dalla funzione. – cletus

+0

@cletus: non è possibile accedere alla matrice originale: la stringa è immutabile, quindi la stessa matrice dovrebbe essere la sorgente. Ma in Java è sempre possibile modificare un array, il che causerebbe l'interruzione delle ottimizzazioni Java (internig). Ad ogni modo una copia è più veloce di molti 'length()' e 'charAt()'. – gertas

+4

@gertas è esattamente quello che stavo dicendo. Poiché gli array sono mutabili, devono essere copiati in modo difensivo. Quindi hai il costo di quella copia per cosa? Zucchero sintattico Ecco perché questa è una cattiva idea. – cletus

27

Java String s non sono cahracter Iterable. Avrai bisogno di:

for (int i=0; i<examplestring.length(); i++) { 
    char c = examplestring.charAt(i); 
    ... 
} 

imbarazzante lo so.

2

Utilizzando Guava (r07) si può fare questo:

for(char c : Lists.charactersOf(someString)) { ... } 

Questo ha la comodità di usare foreach mentre non copia la stringa in un nuovo array. Lists.charactersOf restituisce un visualizza della stringa come List.

+0

+1. Non sapevo che r07 fosse fuori. Sebbene, interessante, questa è la più lenta delle opzioni disponibili. Ci sono voluti più del 49% per completare di un test 'charAt' equivillante. – Gunslinger47

+0

@ Gunslinger47: Immagino che la necessità di inscatolare e rimuovere ogni char per questo rallenterebbe un po '. Il metodo è probabilmente più destinato ad adattare stringhe da utilizzare con varie API basate su 'Collection' piuttosto che per l'iterazione come questa. – ColinD

0

ne dite di questo

for (int i=0;i < str.length();i++) 
{ 
    System.out.println(str.substring(i,i+1)); 
} 
Problemi correlati