在Java中创建replaceFirst()方法的问题

时间:2019-03-14 14:47:26

标签: java string

为什么此代码不起作用? 我想做的是创建一个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'));
    }
}

先谢谢了。 如果我在问这个问题时犯了任何错误,对不起。

3 个答案:

答案 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值。

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceFirst(java.lang.String,%20java.lang.String)

如果这是预期的行为,则String上还有一个replaceAll方法。