用Java交换字符串中的字符

时间:2018-11-01 09:50:53

标签: java

鉴于上述摘录自Java代码,我需要修改代码,以便可以递归交换字符串变量“ locationAddress”的内容对。 请注意,变量“ locationAddress”包含一个字符串,例如abcdefghij。 我希望成对交换“ abcdefghij”,这样结果将是“ badcfehgji”。

请协助进行上述Java代码摘录的必要修改,以使其递归地交换字符串变量“ 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);
    }    
}

3 个答案:

答案 0 :(得分:3)

这是在Java中使用正则表达式替换的一种非常简单的方法:

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

badcfehgji

这个想法是从字符串的开头开始,沿着两个不同的捕获组一次捕获两个字符。然后,只需替换掉这两个捕获的字符即可。

答案 1 :(得分:1)

这里是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);
}

用法:

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

答案 2 :(得分:0)

使用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

交换由索引i驱动。如果i是偶数,并且有下一个(i+1)字符,则使用该字符。如果i为奇数,则使用前一个(i-1)字符。