Swapping Characters in a String in Java

后端 未结 3 1339
遥遥无期
遥遥无期 2021-01-26 06:47

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

相关标签:
3条回答
  • 2021-01-26 07:31

    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.

    0 讨论(0)
  • 2021-01-26 07:35

    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"));
    
    0 讨论(0)
  • 2021-01-26 07:45

    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.

    0 讨论(0)
提交回复
热议问题