Java deleteCharAt函数

Java deleteCharAt函数,java,string,Java,String,我创建此方法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.substr

我创建此方法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个字符吗?还是我弄乱了子字符串函数?

它不太正确-这是:

public static String deleteCharAt(String s, int pos) {
   StringBuffer buf = new StringBuffer( s.length() - 1 );
   buf.append( s.substring(0,pos) ).append( s.substring(pos+1) );
   return buf.toString();
}
String first = str.substring(0, i - 1);
应该是:

String first = str.substring(0, i);
else if (i == str.length() - 1) {
    return str.substring(0, i);
}
(考虑一个简单的例子-如果
i
为1,您希望获取
子字符串(0,1)
以获取第一个字符;
子字符串(0,0)
将给出一个空字符串。)

因为
子字符串
的第二个参数已经是独占的

同样,此优化:

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

String first = 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));
    }
}

这不太正确-这是:

String first = str.substring(0, i - 1);
应该是:

String first = str.substring(0, i);
else if (i == str.length() - 1) {
    return str.substring(0, i);
}
(考虑一个简单的例子-如果
i
为1,您希望获取
子字符串(0,1)
以获取第一个字符;
子字符串(0,0)
将给出一个空字符串。)

因为
子字符串
的第二个参数已经是独占的

同样,此优化:

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

String first = 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));
    }
}

此代码是否会成功删除字符串中的第i个字符?
嗯。。。试一试怎么样?我试过了,但它似乎删除了正确的一个,但也删除了正确的一个之前的一个。你这样做的方式很好,但是StringBuffer已经有了一种方法,可以完全实现你要做的事情,如果你要做的事情已经存在,那么就不要这样做“重新发明轮子。“
此代码是否会成功删除字符串中的第i个字符?
嗯。。。试一试怎么样?我试过了,但它似乎删除了正确的一个,但也删除了正确的一个之前的一个。你这样做的方式很好,但是StringBuffer已经有了一种方法,可以完全实现你要做的事情,如果你要做的事情已经存在,那么就不要这样做“重新发明轮子。”