在Java中创建replaceFirst()方法时出现问题

在Java中创建replaceFirst()方法时出现问题,java,string,Java,String,为什么这个代码不起作用? 我试图创建一个ReplaceAll()方法,但它给出了ArrayIndexOutOfBoundsException错误 这是类文件: public class MyString{ private char[] data; public MyString(){ } public MyString(String s){ data = s.toCharArray(); } public char replaceFirst(char o, char n){ fo

为什么这个代码不起作用? 我试图创建一个ReplaceAll()方法,但它给出了
ArrayIndexOutOfBoundsException
错误

这是类文件:

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];
}
提前谢谢。
如果我在问这个问题时出错了,对不起。

问题在方法的最后一行:

 return data[n];
n
是替换字符,但java在这里将其解释为数字。n是一个字符“k”,也是数字107。而且您的输入字符串“Nafees”没有那么多字符

如果要获取包含替换字符的字符串,应改为使用:

return new String(data);

另外,您应该重命名方法或更改实现,因为您正在替换所有匹配字符,而不是第一个

在方法数据[n]的末尾返回。但是,n是方法的参数(字符),而不是整数。因此,他将n转换为一个整数,该整数将超出您的字符数组的限制。

虽然每个人都在帮助诊断和调试您的代码,但我想指出,
replaceFirst
是Java 1.4以来标准Java字符串对象的一部分,虽然它需要一个正则表达式和字符串,而不是两个字符值


字符串上还有一个
replaceAll
方法,如果这是预期的行为。

可能重复的,请参阅链接的答案。社区不喜欢调试这些异常,因为原因通常是基本的编程错误as
n
可能高于
data.length
因此
IndexOutOfBoundException
返回数据[n],其中n被转换为int。@TaaviKivimaa不应该,因为OP使用的是

return new String(data);