鉴于上述摘录自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);
}
}
答案 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
)字符。