Java deleteCharAt函数

时间:2012-03-16 17:53:57

标签: java string

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

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个字符?或者我搞乱了子串函数?

2 个答案:

答案 0 :(得分:2)

这不太对 - 这个:

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

答案 1 :(得分:1)

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();
}