如何递归地向字符串添加char?

时间:2014-02-17 03:37:45

标签: java string recursion

我正在尝试编写一个方法,将给定的char c插入到位置i的String s中(这些都作为参数给出)。例如,给定'z',3和“bbbb”的参数,它应该返回“bbbzb”。当然,我可以这样做:

return s.substring(0, i) + c + s.substring(i + 1);

但问题是,它必须是递归的。我想出的代码如下:

    public static String insertInto(char c, int i, String s) {
    return insertIntoHelper(c, i, s, 0);
}

public static String insertIntoHelper(char c, int i, String s, int index) {
    if (s == null || s.equals("")) {
        return "";
    }
    if (index == i) {
        return c + insertIntoHelper(c, i, s, index++);
    } else {
        return s.substring(0, 1) + insertIntoHelper(c, i, s.substring(1), index++);
    }
}

这里的逻辑是,如果索引小于i,则返回第一个字母,然后返回字符串的其余部分,或者如果索引等于它,则添加字符等。我必须有一个洞逻辑某处,因为它不起作用,当我将索引设置为0时,我甚至会收到错误。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

您的错误是在递归调用中使用后缀增量。

}                                        //   |
if (index == i) {                        //   v
    return c + insertIntoHelper(c, i, s, index++);                    //   |
} else {                                                              //   v
    return s.substring(0, 1) + insertIntoHelper(c, i, s.substring(1), index++);
}

后缀增量'返回'增量发生之前的int值(JLS 15.14.2)。因此,请使用常规+ 1

if (index == i) {
    return c + insertIntoHelper(c, i, s, index + 1);
} else {
    return s.substring(0, 1) + insertIntoHelper(c, i, s.substring(1), index + 1);
}

虽然我同意其他人的观点,但其他问题更适合递归。

答案 1 :(得分:-1)

试试这个:

public static String insertInto(char c, int i, String s) {
    if (i == 0) {
        return c+s;
    }
    if (s.isEmpty()) {
        return "";
    }
    return s.charAt(0) + insertInto(c,i-1,s.substring(1));
}