我的有关交换相邻字符的代码有什么问题?

时间:2018-12-21 14:24:15

标签: java

问题:编写一个名为swapPairs的方法,该方法接受String作为参数,并以相邻的每对相邻字母相反的方式返回该String。如果字符串的字母数为奇数,则最后一个字母不变。例如,调用swapPairs(“ example”)应该返回“ xemalpe”,调用swapPairs(“ hello there”)应该返回“ ehll ohtree”。

public static String swapPairs(String s) {
    String t="";
    if(s.length()%2==0) {
        for (int i=0;i<s.length()/2;i++) {
            t+=s.charAt(2*i+1)+s.charAt(2*i);
        }
    }
    else {
        for (int i=0;i<s.length()/2;i++) {
            t+=s.charAt(2*i+1)+s.charAt(2*i);
         }
        t+=s.charAt(s.length()-1);
    }
    return t;
}

3 个答案:

答案 0 :(得分:1)

您只能将1用于以下周期:

public static String swapPairs(String s) {
    StringBuilder t = new StringBuilder();
    for(int i = 0; i < s.length() - 1; i += 2) {
        t.append(s.charAt(i + 1));
        t.append(s.charAt(i));
    }
    if(s.length() % 2 == 1) { //appending the last character if needed
        t.append(s.charAt(s.length() - 1));
    }
    return t.toString();
}

也可以使用StringBuilder:)

答案 1 :(得分:0)

String#charAt返回一个char。添加两个char将导致另一个字符(因为char是数字类型),而不是您所期望的String。编译器应向您提供该方向的错误消息。

您可以改用String#substring

答案 2 :(得分:0)

您可以修改方法,改为使用StringBuilder并将其更改为:

sb.append(s.charAt((2 * i) + 1)).append(s.charAt(2 * i));