线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:-18

线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:-18,java,Java,这是我的密码 import java.util.Scanner; import java.io.*; class Main { public static void main (String[] args)throws IOException { Scanner scan = new Scanner(System.in); System.out.println ("Enter message board post:"); String username = scan.nextLin

这是我的密码

import java.util.Scanner;
import java.io.*;

class Main {
public static void main (String[] args)throws IOException {
  Scanner scan = new Scanner(System.in);
  System.out.println ("Enter message board post:");
  String username = scan.nextLine();
  String check = username.substring (username.indexOf(" ")+3 , username.length()).toLowerCase()+" ";
  int a = check.indexOf(" ^^ ");
  int b = check.indexOf (" qey ");
  int c = check.indexOf (" $ ");
  String first = username.substring (0 , username.indexOf(" "));
  int x = 0;
  int y =0;
  int z = 0;
  while (a != -1) {
    x++;
  check = check.substring(a+1, check.length()); 
  a = check.indexOf(" ^^ "); }
  while (b != -1) {
    y++;
  check = check.substring(b+1, check.length());
  b = check.indexOf(" qey "); }
  while (c != -1) {
    z++;
  check = check.substring(c+1, check.length());
  c = check.indexOf (" $ "); }
  if ( x > 0  || y > 0 || z > 0){
    System.out.println ("");
    System.out.println ("BAD");
      System.out.println (first);
      System.out.println ("^^: " +x);
      System.out.println ("qey: " +y);
      System.out.println ("$: " +z);

  }else {
      System.out.println ("");
      System.out.println ("CLEAN");
    }
  }
}
最终结果是:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -18
at java.lang.String.substring(String.java:1967)
at Main.main(Main.java:23)
我必须更换哪些部件才能去除螺纹? 我输入B0rg-阻力是徒劳的QeY hahahaha$$^^

它应该显示为

BAD
B0rg
^^: 1
qey:1 $:0


但它作为例外出现了。。。请帮帮我…

我假设您只输入了一个单词,因为如果您输入两个,它就可以正常工作。它失败了两次,因为它正在寻找一个它不能做的子字符串,除非有两个单词被分隔符分隔,而分隔符恰好是一个空格。

-也许你应该执行int b=check.indexOf qey;在a循环之后,因为a循环修改check。另外,修复你的缩进,因为它们目前使代码很难阅读。为了它的价值,这似乎是AP计算机科学课程edhesive的一个作业,所以这是一个初学者提出的问题。