Skip to content
Related Articles

Related Articles

Improve Article

Iterate Over the Characters of a String in Java

  • Difficulty Level : Medium
  • Last Updated : 15 Sep, 2021
Geek Week

Given string str of length N, the task is to traverse the string and print all the characters of the given string.

Illustration:

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

Methods:

  1. Using Naive Approach
  2. Using String.toCharArray() method
  3. Using CharacterIterator
  4. Using StringTokenizer
  5. Using String.split() method
  6. Using Guava Library
  7. Using String.chars() method
  8. Using Code Points

Method 1: Naive Approach

The simplest approach to solve this problem is to iterate a loop over the range [0, N – 1], where N denotes the length of the string, using the variable i and print the value of str[i].



Example 

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);
    }
}
Output
G e e k s f o r G e e k s 

Time Complexity: O(N)
Auxiliary Space: O(1)

Method 2: Using String.toCharArray() method

In this approach, we convert string to a character array using String.toCharArray() method. Then iterate the character array using for loop or for-each loop.

Example 

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);
    }
}
Output
G e e k s f o r G e e k s 

Time Complexity: O(N)
Auxiliary Space: O(N)

Method 3: Using CharacterIterator

In this approach, we use the CharacterIterator methods current() to get the current character and next() to move forward by one position. StringCharacterIterator provides the implementation of CharacterIterator.



Example  

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);
    }
}
Output
G e e k s f o r G e e k s 

Time Complexity: O(N)
Auxiliary Space: O(1)

Method 4: Using StringTokenizer

In this approach, we use StringTokenizer class in Java. It breaks a string into tokens based on the delimiter. Its usage is discouraged.

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".

Example 

Java




// Java Program to Iterate Over the Characters of a String
// Using StringTokenizer
 
// Importing required librares
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);
    }
}
Output
G e e k s f o r G e e k s 
GeeksforGeeks 

Time Complexity: O(N)
Auxiliary Space: O(N)

Method 5: Using String.split() method

In this approach, we use the split() method of the String class. It splits the string into substrings based on the regular expression provided.

Example 

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);
    }
}
Output



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

Time Complexity: O(N)
Auxiliary Space: O(N)

Method 6: Using Guava Library

In this approach, we use Lists.charactersOf(str) method which returns a view of an immutable list of characters.

Example 

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);
    }
}
Output
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

Time Complexity: O(N)
Auxiliary Space: O(N)

Method 7: Using String.chars() method

In this approach, we use the chars() method of the String class. This method does not return the Stream<Character> object due to performance reasons. It returns an IntStream(stream of integers) object which can be converted to a Stream<Character>(stream of characters).

Example 

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);
    }
}
Output
Auto boxing into Stream<Character>
GeeksforGeeks7110110110711510211111471101101107115
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
Without boxing into Stream<Character>
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks

Time Complexity: O(N)
Auxiliary Space: O(N)

Method 8: Using Code Points

In this approach, we use String.codePoints() method which returns a stream of Unicode values.

Example

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 kine 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);
    }
}
Output
Auto boxing into Stream<Character>
GeeksforGeeks7110110110711510211111471101101107115
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks
Without boxing into Stream<Character>
GeeksforGeeks
GeeksforGeeks
GeeksforGeeks

Time Complexity: O(N)
Auxiliary Space: O(N)

 

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :