Saturday, December 28, 2024
Google search engine
HomeLanguagesJavaSwapping Characters of a String in Java

Swapping Characters of a String in Java

As we know that Object of String in Java are immutable (i.e. we cannot perform any changes once its created). 
To do modifications on string stored in a String object, we copy it to a character array, StringBuffer, etc and do modifications on the copy object.
In this article we would go through some methods to swap character of a given String and get a new String (with swapped characters) while the original String remains unaffected.
Through the examples below lets see some of the method by which we can swap character an generate new String 
Examples: 

Method 1 (Using toCharArray) 

In this method we convert the String into the Character array and perform the required Swapping.

Java




// Java program to demonstrate character swap
// using toCharArray().
public class GFG {
    static char[] swap(String str, int i, int j)
    {
        char ch[] = str.toCharArray();
        char temp = ch[i];
        ch[i] = ch[j];
        ch[j] = temp;
        return ch;
    }
 
    public static void main(String args[])
    {
        String s = "neveropen";
 
        System.out.println(swap(s, 6, s.length() - 2));
        System.out.println(swap(s, 0, s.length() - 1));
 
        System.out.println(s);
    }
}


Output: 

geeksfkrgeeos
seeksforgeekg
neveropen

 

Method 2 (Using subString()) 

We build the modified string using substrings of given string.
 

Java




// Java program to demonstrate character swap
// using subString()
 
public class GFG {
    static String swap(String str, int i, int j)
    {
        if (j == str.length() - 1)
            return str.substring(0, i) + str.charAt(j)
                + str.substring(i + 1, j) + str.charAt(i);
 
        return str.substring(0, i) + str.charAt(j)
            + str.substring(i + 1, j) + str.charAt(i)
            + str.substring(j + 1, str.length());
    }
 
    public static void main(String args[])
    {
        String s = "neveropen";
 
        System.out.println(swap(s, 6, s.length() - 2));
        System.out.println(swap(s, 0, s.length() - 1));
 
        // Original String doesn't change
        System.out.println(s);
    }
}


Output: 

geeksfkrgeeos
seeksforgeekg
neveropen

 

Method 3 (Using StringBuilder or StringBuffer) 

In this method either you can use StringBuilder or StringBuffer depending on the situation. See String vs StringBuilder vs StringBuffer in Java to decide when to use which one. 
 

Java




// Java program to demonstrate character swap
// using StringBuilder
 
public class GFG {
    static String swap(String str, int i, int j)
    {
        StringBuilder sb = new StringBuilder(str);
        sb.setCharAt(i, str.charAt(j));
        sb.setCharAt(j, str.charAt(i));
        return sb.toString();
    }
 
    public static void main(String args[])
    {
        String s = "neveropen";
 
        System.out.println(swap(s, 6, s.length() - 2));
        System.out.println(swap(s, 0, s.length() - 1));
 
        // Original String doesn't change
        System.out.println(s);
    }
}


Output: 

geeksfkrgeeos
seeksforgeekg
neveropen

 

Method 4 (Using XOR Operator) 

The XOR operator can be used to swap two characters in a string. The idea is to take XOR of both characters and then take XOR of each character with the result again. This will result in swapping of the characters.
This approach works because XOR of any two same number is 0 and XOR of a number X with 0 is X.

Java




// Java program to demonstrate character swap
// using XOR Operator
 
public class GFG {
    static String swap(String str, int i, int j)
    {
        char[] ch = str.toCharArray();
 
        // Swapping using XOR operation
        ch[i] = (char)(ch[i] ^ ch[j]);
        ch[j] = (char)(ch[i] ^ ch[j]);
        ch[i] = (char)(ch[i] ^ ch[j]);
 
        return String.valueOf(ch);
    }
 
    public static void main(String args[])
    {
        String s = "neveropen";
 
        System.out.println(swap(s, 6, s.length() - 2));
        System.out.println(swap(s, 0, s.length() - 1));
 
        // Original String doesn't change
        System.out.println(s);
    }
}
 
// This code is contributed by Susobhan Akhuli


Output

geeksfkrgeeos
seeksforgeekg
neveropen

This article is contributed by Sumit Ghosh. If you like Lazyroar and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the Lazyroar main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

RELATED ARTICLES

Most Popular

Recent Comments