Iterar sobre los caracteres de una string en Java

Dada la string str de longitud N , la tarea es atravesar la string e imprimir todos los caracteres de la string dada.

Ilustración:

Input  : “GeeksforGeeks”
Output : G e e k s f o r G e e k s
Input. : “Coder”
Output : C o d e r

Métodos:

  1. Usando un enfoque ingenuo
  2. Usando el método String.toCharArray()
  3. Usando CharacterIterator
  4. Usando StringTokenizer
  5. Usando el método String.split()
  6. Uso de la biblioteca de guayaba
  7. Usando el método String.chars()
  8. Uso de puntos de código

Método 1: enfoque ingenuo

El enfoque más simple para resolver este problema es iterar un ciclo sobre el rango [0, N – 1] , donde N denota la longitud de la string, usando la variable i e imprimir el valor de str[i] .

Ejemplo 

Java

// Java Program to Iterate Over the Characters of a String
// Using Naive Approach
 
// Importing classes from respective packages
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Method 1
    // Function to traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        // Traverse the string
        for (int i = 0; i < str.length(); i++) {
 
            // Print current character
            System.out.print(str.charAt(i) + " ");
        }
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
        // Calling the Method 1
        traverseString(str);
    }
}
Producción

G e e k s f o r G e e k s 

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Método 2: Usar el método String.toCharArray()

En este enfoque, convertimos una string en una array de caracteres utilizando el método String.toCharArray() . Luego itere la array de caracteres usando for loop o for-each loop.

Ejemplo 

Java

// Java Program to Iterate Over the Characters of a String
// Using String.toCharArray() method
 
// Importing classes from respective packages
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Method 1
    // To traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        char[] ch = str.toCharArray();
 
        // Traverse the character array
        for (int i = 0; i < ch.length; i++) {
 
            // Print current character
            System.out.print(ch[i] + " ");
        }
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
        // Calling the Method 1
        traverseString(str);
    }
}
Producción

G e e k s f o r G e e k s 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Método 3: Usar CharacterIterator

En este enfoque, usamos los métodos de CharacterIterator current() para obtener el carácter actual y next() para avanzar una posición. StringCharacterIterator proporciona la implementación de CharacterIterator.

Ejemplo  

Java

// Java Program to Iterate Over the Characters of a String
// Using CharacterIterator
 
// Importing required libraries
import java.io.*;
import java.text.*;
 
// Main class
class GFG {
 
    // Method 1
    // To traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        CharacterIterator it
            = new StringCharacterIterator(str);
 
        // Iterate and print current character
        while (it.current() != CharacterIterator.DONE) {
            System.out.print(it.current() + " ");
 
            // Moving onto next element in the object
            // using next() method
            it.next();
        }
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
        // Calling the Method 1
        traverseString(str);
    }
}
Producción

G e e k s f o r G e e k s 

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Método 4: Usar StringTokenizer

En este enfoque, usamos la clase StringTokenizer en Java. Divide una string en tokens según el delimitador. Se desaconseja su uso.

StringTokenizer(String str, String delim, boolean flag):
The first two parameters have same meaning.  The flag 
serves following purpose.

If the flag is false, delimiter characters serve to 
separate tokens. For example, if string is "hello geeks"
and delimiter is " ", then tokens are "hello" and "geeks".

If the flag is true, delimiter characters are 
considered to be tokens. For example, if string is "hello
 geeks" and delimiter is " ", then tokens are "hello", " " 
and "geeks".

Ejemplo 

Java

// Java Program to Iterate Over the Characters of a String
// Using StringTokenizer
 
// Importing required libraries
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Method 1
    // To traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        // If returnDelims is true, use the string itself as
        // a delimiter
        StringTokenizer st
            = new StringTokenizer(str, str, true);
 
        while (st.hasMoreTokens()) {
            System.out.print(st.nextToken() + " ");
        }
 
        System.out.println();
 
        // If returnDelims is false, use an empty string as
        // a delimiter
        st = new StringTokenizer(str, "", false);
 
        while (st.hasMoreTokens()) {
            System.out.print(st.nextToken() + " ");
        }
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
        /// Calling the above Method1
        traverseString(str);
    }
}
Producción

G e e k s f o r G e e k s 
GeeksforGeeks 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Método 5: Usar el método String.split()

En este enfoque, usamos el método split() de la clase String. Divide la string en substrings en función de la expresión regular proporcionada.

Ejemplo 

Java

// Java Program to Iterate Over the Characters of a String
// Using String.split() method
 
// Importing required classes from respective packages
import java.io.*;
import java.util.*;
 
// Main class
class GFG {
 
    // Method 1
    // To traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        // Split str around matches of empty string ""
        String[] substrings = str.split("");
         
      for (String ch : substrings) {
            System.out.print(ch + " ");
        }
    }
   
    // Method 2
    // main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
        // Calling the Method1 to
        // print the characters of the string
        traverseString(str);
    }
}
Producción

G e e k s f o r G e e k s 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Método 6: Uso de la biblioteca de guayaba

En este enfoque, usamos el método Lists.charactersOf(str) que devuelve una vista de una lista inmutable de caracteres.

Ejemplo 

Java

// Java Program to Iterate Over the Characters of a String
// Using Guava Library
 
// Importing required classes from respective packages
import com.google.common.collect.Lists;
import java.io.*;
 
// Main class
class GFG {
 
    // Method 1
    // To traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        // Using enhanced for loop
        for (Character ch : Lists.charactersOf(str)) {
            System.out.print(ch + " ");
        }
 
        // A new line is required
        System.out.println();
 
        // Using listIterator on the List
        // List<Characters>
        // iterator()
        // lambda
        Lists.charactersOf(str)
            .listIterator()
            .forEachRemaining(
                ch -> System.out.print(ch + " "));
 
        // A new line is required
        System.out.println();
 
        // Using method reference with listIterator
        // List<Characters>
        // iterator()
        Lists.charactersOf(str)
            .listIterator()
            .forEachRemaining(System.out::print);
    }
   
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
        // Calling the Method1 to
        // print the characters of the string
        traverseString(str);
    }
}
Producción

G e e k s f o r G e e k s 
G e e k s f o r G e e k s 
GeeksforGeeks

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Método 7: Usar el método String.chars()

En este enfoque, usamos el método chars() de la clase String. Este método no devuelve el objeto Stream<Character> por motivos de rendimiento. Devuelve un objeto IntStream (flujo de enteros) que se puede convertir en Stream<Character>(flujo de caracteres).

Ejemplo 

Java

// Java Program to Iterate Over the Characters of a String
// Using String.chars() method
 
// Importing classes from required packages
import com.google.common.collect.Lists;
import java.io.*;
 
// main class
class GFG {
 
    // Method 1
    // to traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        // Display message for better readability
        System.out.println(
            "Auto boxing into Stream<Character>");
 
        // Using method reference
        str.chars()
            .mapToObj(Character::toChars)
            .forEach(System.out::print);
 
        str.chars().forEach(System.out::print);
 
        // A new line is required
        System.out.println();
 
        // Using lambda expressions by casting int to char
        str.chars()
            .mapToObj(i -> Character.valueOf((char)i))
            .forEach(System.out::print);
 
        // A new line is required
        System.out.println();
 
        str.chars()
            .mapToObj(i -> (char)i)
            .forEach(System.out::print);
 
        // A new line is required
        System.out.println();
        str.chars()
            .mapToObj(
                i -> new StringBuilder().appendCodePoint(i))
            .forEach(System.out::print);
 
        // A new line is required
        System.out.println();
 
        // Display message for better readability
        System.out.println(
            "Without boxing into Stream<Character>");
 
        str.chars().forEach(
            i -> System.out.print(Character.toChars(i)));
 
        // A new line is required
        System.out.println();
 
        str.chars().forEach(i -> System.out.print((char)i));
 
        // A new line is required for
        // readability in output clearly
        System.out.println();
 
        str.chars().forEach(
            i
            -> System.out.print(
                new StringBuilder().appendCodePoint(i)));
    }
 
    // Method 2
    // main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
        // Calling the Method 1 to
        // print the characters of the string
        traverseString(str);
    }
}
Producción

Auto boxing into Stream<Character>
GeeksforGeeks7110110110711510211111471101101107115
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
Without boxing into Stream<Character>
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Método 8: Uso de puntos de código

En este enfoque, usamos el método String.codePoints() que devuelve un flujo de valores Unicode.

Ejemplo

Java

// Java Program to Iterate Over the Characters of a String
// Using Code Points
 
// importing classes from respective packages
import com.google.common.collect.Lists;
import java.io.*;
 
// main class
class GFG {
 
    // Method 1
    // To traverse the string and
    // print the characters of the string
    static void traverseString(String str)
    {
        // Display message for better readability
        System.out.println(
            "Auto boxing into Stream<Character>");
       
        // Using method reference
        str.codePoints()
            .mapToObj(Character::toChars)
            .forEach(System.out::print);
        str.codePoints().forEach(System.out::print);
         
        // New line is required
        System.out.println();
       
        // Using lambda expressions by casting int to char
        str.codePoints()
            .mapToObj(i -> Character.valueOf((char)i))
            .forEach(System.out::print);
 
        // New line is required
        System.out.println();
 
        // now using the codepoints() over the string
        str.codePoints()
            .mapToObj(i -> (char)i)
            .forEach(System.out::print);
 
        // New line is required
        System.out.println();
       
        str.codePoints()
            .mapToObj(
                i -> new StringBuilder().appendCodePoint(i))
            .forEach(System.out::print);
 
       
        System.out.println();
       
      // Display message for readability in output
      System.out.println(
            "Without boxing into Stream<Character>");
        str.codePoints().forEach(
            i -> System.out.print(Character.toChars(i)));
 
        System.out.println();
         
      str.codePoints().forEach(
            i -> System.out.print((char)i));
 
        System.out.println();
         
      str.codePoints().forEach(
            i
            -> System.out.print(
                new StringBuilder().appendCodePoint(i)));
    }
   
    // Method 2
    // main driver method
    public static void main(String[] args)
    {
        // Custom input string
        String str = "GeeksforGeeks";
 
       // Calling the Method1 to 
       // print the characters of the string
        traverseString(str);
    }
}
Producción

Auto boxing into Stream<Character>
GeeksforGeeks7110110110711510211111471101101107115
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
Without boxing into Stream<Character>
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por Ganeshchowdharysadanala y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *