我在使用StringBuilder时遇到错误

时间:2014-03-07 00:28:25

标签: java stringbuilder

int输入表示数字k,该方法应该用第二个char输入替换第一个char输入的第k个匹配项。如果第一个char没有出现至少k次,那么什么都不会被替换。

public class HW2{
    public static String replaceKth(char a, char b, int k, String c){
        StringBuilder builder = new StringBuilder();
        int occ = 0;
        for(int i = 0; i < c.length(); i = i + 1){
            if (c.charAt(i) == a){
                occ = occ + 1;
                if(occ == k){
                    builder.setCharAt(i, b);
                }
            }
        }
        return builder.toString();
    }
}

当我试图测试时:

HW2.replaceKth(a, b, 3, "aabaa")
Static Error: Undefined name 'a'

是的,我定义a并出现另一个错误

HW2.replaceKth('a', 'a', 3, "aabaa")
java.lang.StringIndexOutOfBoundsException: String index out of range: 3
    at java.lang.AbstractStringBuilder.setCharAt(AbstractStringBuilder.java:347)
    at java.lang.StringBuilder.setCharAt(StringBuilder.java:55)
    at HW2.replaceKth(HW2.java:15)
> 

4 个答案:

答案 0 :(得分:0)

如果没有单引号,a只是一个变量名,似乎没有在此定义。

当您致电replaceKth时,请将ab定义为具有特定值的char,或者传递char个文字,每个文字都包含在内单引号。

char a = 'a';
char b = 'b';

OR

HW2.replaceKth('a', 'b', 3, "aabaa");

答案 1 :(得分:0)

您的错误似乎是因为您发送的是变量 a而不是字母a。

a是您未声明的变量。在调用方法时,可以创建一个,或在字母周围使用引号。

答案 2 :(得分:0)

您永远不会将构建器实例设置为等于您要修改的String对象。

public static String replaceKth(char a, char b, int k, String c){
    StringBuilder builder = new StringBuilder(c);
    int occ = 0;
    for(int i = 0; i < c.length(); i++){
        if (c.charAt(i) == a){
            occ = occ + 1;
            if(occ == k){
                builder.setCharAt(i, b);
            }
        }
    }
    return builder.toString();
}

答案 3 :(得分:0)

您未将String转换为StringBuilder

将代码行更改为

 StringBuilder builder = new StringBuilder(c);

你可以这样做来替换索引处的字符

public class StringTest {
    public static void main(String[] args) {
        System.out.println(StringTest.replaceKth('a', 'b', 3, "aabaa"));
    }

    public static String replaceKth(char a, char b, int k, String c){
        StringBuilder builder = new StringBuilder(c);
        if(builder.charAt(k)==a){
            builder.setCharAt(k, b);
        }
        return builder.toString();
    }
}