为什么此代码不起作用?
我想做的是创建一个ReplaceAll()方法,但它给出了ArrayIndexOutOfBoundsException
错误。
这是Class文件:
public class MyString{
private char[] data;
public MyString(){
}
public MyString(String s){
data = s.toCharArray();
}
public char replaceFirst(char o, char n){
for(int i=0; i<data.length; i++){
if(data[i]==o){
data[i]=n;
}
}
return data[n];
}
这是我的测试器文件:
public class Tester{
public static void main(String[] args){
MyString m1 = new MyString();
MyString m2 = new MyString("Nafees");
System.out.println(m2.replaceFirst('N','k'));
}
}
先谢谢了。 如果我在问这个问题时犯了任何错误,对不起。
答案 0 :(得分:2)
问题在方法的最后一行:
return data[n];
n
是替换字符,但是java在这里将其解释为数字。 n是字符“ k”,它也是数字107。您输入的字符串“ Nafees”没有那么多字符。
如果要获取带有替换字符的字符串,则应改用以下字符:
return new String(data);
P.S。您应该重命名方法或更改实现,因为要替换所有匹配的字符,而不是先替换。
答案 1 :(得分:0)
您将在方法数据[n]的末尾返回。但是n是您方法的参数(字符),而不是整数。因此,他会将n转换为整数,该整数将超出字符数组的限制。
答案 2 :(得分:0)
虽然每个人都可以帮助您诊断和调试代码非常好,但我想指出replaceFirst
是Java 1.4以来的标准Java String对象的一部分,尽管它确实希望使用正则表达式和字符串来代替的两个char值。
如果这是预期的行为,则String上还有一个replaceAll
方法。