我创建了此方法deleteCharAt,以便通过其索引从字符串中删除字符:

public String deleteCharAt(String str, int i) {

    if (i == 0) {
        return str.substring(1);
    }
    else if (i == str.length()) {
        return str.substring(0, i-1);
    }

    String first = str.substring(0, i - 1);
    String second = str.substring(i+1);

    return first + second;
}


但是它没有按预期工作,我认为可能是因为我不了解子字符串函数的工作原理。

这看起来正确吗?此代码将成功从字符串中删除第i个字符吗?还是弄乱了子字符串功能?

最佳答案

这不太正确-这是:

String first = str.substring(0, i - 1);


应该:

String first = str.substring(0, i);


(考虑一个简单的示例-如果i为1,则要使用substring(0, 1)来获取第一个字符; substring(0, 0)将给出一个空字符串。)

因为substring的第二个参数已经是排他的。

同样,此优化:

else if (i == str.length()) {
    return str.substring(0, i);
}


应该:

else if (i == str.length() - 1) {
    return str.substring(0, i);
}


您还应该添加参数验证。

进行这些更改之后,此代码:

public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
        System.out.println(deleteCharAt("0123456789", i));
    }
}


给出以下输出:

123456789
023456789
013456789
012456789
012356789
012346789
012345789
012345689
012345679
012345678

关于java - Java deleteCharAt函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9742163/

10-11 04:59