这是我正在使用的代码
import java.io.*;
import java.util.Scanner;
class Main{
public static void main (String str[]) throws IOException {
Scanner scan = new Scanner (System.in);
int c = 0;
int d = 0;
System.out.println("please enter the first string");
String q = scan.nextLine ();
int b = q.length();
int asterisk = q.indexOf('*');
while(c < b-1)
{
c++;
if (q.charAt(c) == '*')
{
d++;
break;
}
}
if(d<1)
{
System.out.println("Error: no *");
}
else
{
System.out.println("Enter the replacement string");
}
String rep = scan.nextLine();
System.out.println(q.substring(0,q.indexOf('*')) + rep + q.substring(asterisk+1,b));
}
}
和我收到的错误
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 22
at java.lang.String.charAt(String.java:658)
at Main.main(Main.java:282)
at Ideone.assertRegex(Main.java:125)
at Ideone.test(Main.java:45)
at Ideone.main(Main.java:28)
我认为这与我正在使用的字母有关,但我无法正确理解如何纠正这个问题 我对编码很陌生,所以可能有一些简单的解决方法我可以俯瞰 如果有人可以提供帮助,将不胜感激
答案 0 :(得分:0)
问题是你在调用charAt之前增加c,有效地超出范围,在最后一个char中。调用charAt后必须增加c。你还必须比较b而不是b-1,所以你不会错过最后一个角色。
所以替换这个
while(c < b-1) {
c++;
if (q.charAt(c) == '*') {
d++;
break;
}
}
用这个:
while(c < b) {
if (q.charAt(c) == '*') {
d++;
break;
}
c++;
}