【问题标题】:I got an error while using StringBuilder使用 StringBuilder 时出现错误
【发布时间】:2014-03-07 09:52:02
【问题描述】:

int 输入表示一个数字 k,该方法应将第 k 次出现的第一个 char 输入替换为第二个 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)
> 

【问题讨论】:

  • 你先定义a了吗?
  • 是的,你在调用者中声明了什么a?或者你的意思是像HW2.replaceKth('a', 'b', 3, "aabaa")这样的事情?

标签: java stringbuilder


【解决方案1】:

您永远不会将构建器实例设置为等于您要修改的 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();
}

【讨论】:

    【解决方案2】:

    没有单引号,a 只是一个变量名,这里似乎没有定义。

    当您调用replaceKth 时,要么将ab 定义为具有特定值的chars,要么传递char 文字,每个文字都用单引号括起来。

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

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

    【讨论】:

      【解决方案3】:

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

      a 是您未声明的变量。要么做一个,要么在调用方法时在字母周围使用引号。

      【讨论】:

        【解决方案4】:

        您没有将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();
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-31
          • 1970-01-01
          • 2019-11-12
          • 2021-06-18
          • 2014-05-30
          • 2019-05-17
          相关资源
          最近更新 更多