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)
>
答案 0 :(得分:0)
如果没有单引号,a
只是一个变量名,似乎没有在此定义。
当您致电replaceKth
时,请将a
和b
定义为具有特定值的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();
}
}