2010-09-26 17 views

Respuesta

35

Si desea utilizar bucle avanzadas, puede convertir la cadena en charArray

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

Esto es mucho peor que mi versión que copia el 'string' a una matriz temporal que se devuelve por la función. – cletus

+0

@cletus - no se puede acceder a la matriz original - La cadena es inmutable, por lo que debe ser la matriz de origen. Pero en Java siempre se puede modificar una matriz, lo que causaría romper las optimizaciones de Java (internig). De todos modos, una copia es más rápida que muchas 'length()' y 'charAt()'. – gertas

+4

@gertas eso es exactamente lo que estaba diciendo. Debido a que las matrices son mutables, deben copiarse a la defensiva. ¿Entonces tienes el costo de esa copia para qué? Azúcar sintáctica. Es por eso que esta es una mala idea. – cletus

27

Java String s no se cahracter Iterable. Necesitarás:

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

Awkward I know.

2

Usando Guava (R07) se puede hacer esto:

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

Esto tiene la conveniencia de usar foreach mientras que no copiando la cadena a una nueva matriz. Lists.charactersOf devuelve vista de la cadena como List.

+0

+1. No sabía que r07 estaba fuera. Aunque, curiosamente, esta es la opción más lenta disponible. Se tardó un 49% más en completarse que una prueba equivalente de 'charAt'. – Gunslinger47

+0

@ Gunslinger47: Imagino que la necesidad de encajonar y desempaquetar cada char para esto lo ralentizaría un poco. El método probablemente tenga más la intención de adaptar cadenas para su uso con varias API basadas en 'Collection' que solo para iteraciones como esta. – ColinD

0

¿Qué tal esto

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