我创建了这个方法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个字符?或者我搞乱了子串函数?
答案 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();
}