KenJ
KenJ

Reputation: 9

Swapping Characters in a String in Java

Given the above excerpt from a Java code, I need to modify the code such that it could recursively swap pairs of the content of the string variable, "locationAddress". Please note that the variable, "locationAddress", contains a string of characters, say, abcdefghij. I wish to swap "abcdefghij" in pairs such that the result will be "badcfehgji".

Please kindly assist with the necessary modification to the above Java code excerpt to make it recursively swap pairs of characters in the string variable, "locationAddress".

public void format(DataObject dataSource) throws Exception {
    String locationAddress = dataSource.getValueAsString("Location-Address").substring(4);
    if (dataSource.parameterExists("Location-Address")) {
        dataSource.setParameter("Parameter-Type","400");
        dataSource.setParameter("Parameter-Value", locationAddress);
    }    
}

Upvotes: 0

Views: 448

Answers (3)

LuCio
LuCio

Reputation: 5173

A solution using Stream:

String input = "abcdefghijk";
String swapped = IntStream.range(0, input.length())
        .map(i -> i % 2 == 0 ? i == input.length() - 1 ? i : i + 1 : i - 1)
        .mapToObj(input::charAt)
        .map(String::valueOf)
        .collect(Collectors.joining());
System.out.println(swapped); // badcfehgjik

The swapping is driven by the index i. If i is even and there is a next (i+1) character then it's used. If i is odd then the previous (i-1) character is used.

Upvotes: 0

Sweeper
Sweeper

Reputation: 271040

Here's one solution with StringBuilder:

public static String swapAdjacentPairs(String s) {
    StringBuilder sb = new StringBuilder(s);
    // divide 2 and then multiply by 2 to handle cases where the string length is odd
    // we always want an even string length
    // also note the i += 2
    for (int i = 0 ; i < (s.length() / 2 * 2) ; i += 2) {
        swapAdjacent(sb, i);
    }
    return sb.toString();
}

private static void swapAdjacent(StringBuilder sb, int index) {
    char x = sb.charAt(index);
    sb.setCharAt(index, sb.charAt(index + 1));
    sb.setCharAt(index + 1, x);
}

Usage:

System.out.println(swapAdjacentPairs("abcdefghi"));

Upvotes: 1

Tim Biegeleisen
Tim Biegeleisen

Reputation: 521053

Here is a very simple way to do this using regex replacement in Java:

String input = "abcdefghij";
input = input.replaceAll("(.)(.)", "$2$1");
System.out.println(input);

badcfehgji

The idea is to walk down the string, starting at the beginning, capturing two characters at a time, in two different capture groups. Then, just swap those two captured characters in the replacement.

Upvotes: 3

Related Questions