example - for each java list
¿Cómo aplico el bucle for-each a cada personaje en una cadena? (8)
En Java 8 podemos resolverlo como:
String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));
El método chars () devuelve un IntStream
como se menciona en el doc :
Devuelve una secuencia de int extendiendo los valores de char de esta secuencia. Cualquier char que se asigna a un punto de código sustituto se pasa sin ser interpretado. Si la secuencia se muta mientras se lee la secuencia, el resultado no está definido.
¿Por qué usar forEachOrdered
y no forEach
?
El comportamiento de forEach
es explícitamente no determinista cuando, como forEachOrdered
realiza una acción para cada elemento de esta secuencia, en el orden de encuentro de la secuencia si la secuencia tiene una orden de encuentro definida. Entonces, forEach
no garantiza que la orden se mantendrá. También verifique esta question para más.
También podríamos usar codePoints()
para imprimir, vea esta answer para más detalles.
Así que quiero iterar para cada personaje en una cadena.
Así que pensé:
for (char c : "xyz")
pero obtengo un error de compilación:
MyClass.java:20: foreach not applicable to expression type
¿Cómo puedo hacer esto?
La forma más fácil de for-cada cada char
en una String
es usar toCharArray()
:
for (char ch: "xyz".toCharArray()) {
}
Esto le da la concisión de for-each constructo, pero desafortunadamente String
(que es inmutable) debe realizar una copia defensiva para generar el char[]
(que es mutable), por lo que hay una cierta penalización de costo.
De la documentation :
[
toCharArray()
devuelve] una matriz de caracteres recién asignada cuya longitud es la longitud de esta cadena y cuyos contenidos se inicializan para contener la secuencia de caracteres representada por esta cadena.
Hay formas más detalladas de iterar sobre los caracteres en una matriz (regular para bucle, CharacterIterator
, etc.) pero si está dispuesto a pagar el costo toCharArray()
para cada una es la más concisa.
Necesita convertir el objeto String en una matriz de char utilizando el método toCharArray
() de la clase String:
String str = "xyz";
char arr[] = str.toCharArray(); // convert the String object to array of char
// iterate over the array using the for-each loop.
for(char c: arr){
System.out.println(c);
}
Otra solución útil, puedes trabajar con esta cadena como una matriz de String
for (String s : "xyz".split("")) {
System.out.println(s);
}
Para Travers an String también puede usar charAt()
con la cadena.
me gusta :
String str = "xyz"; // given String
char st = str.charAt(0); // for example we take 0 index element
System.out.println(st); // print the char at 0 index
charAt()
es el método de manejo de cadenas en java que ayuda a Travers la cadena para caracteres específicos.
Si usa Java 8, puede usar chars()
en una String
para obtener una Stream
de caracteres, pero deberá volver a convertir el int
en una char
ya que chars()
devuelve una IntStream
.
"xyz".chars().forEach(i -> System.out.print((char)i));
Si utiliza Java 8 con colecciones de Eclipse , puede usar la clase forEach
para forEach
método con una referencia lambda o de método para iterar sobre todos los caracteres de una String
.
CharAdapter.adapt("xyz").forEach(c -> System.out.print(c));
Este ejemplo particular también podría usar una referencia de método.
CharAdapter.adapt("xyz").forEach(System.out::print)
Nota: soy un committer para las colecciones de Eclipse.
También puedes usar un lambda en este caso.
String s = "xyz";
IntStream.range(0, s.length()).forEach(i -> {
char c = s.charAt(i);
});
String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
}