Java扫描器空命令问题
我使用Java扫描器空命令问题,java,Java,我使用扫描器从Java项目的控制台获取以下简单代码的输入: char com = ' '; Scanner sc = new Scanner(System.in); com = sc.nextLine().charAt(0); 当我输入预期的命令(a、b、c、d…)时,它工作正常,但如果我在未输入命令的情况下按下键盘的enter按钮,则会出现此错误消息,应用程序崩溃: 线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范
扫描器
从Java项目的控制台获取以下简单代码的输入:
char com = ' ';
Scanner sc = new Scanner(System.in);
com = sc.nextLine().charAt(0);
当我输入预期的命令(a、b、c、d…)时,它工作正常,但如果我在未输入命令的情况下按下键盘的enter按钮,则会出现此错误消息,应用程序崩溃:
线程“main”java.lang.StringIndexOutOfBoundsException中出现异常:字符串索引超出范围:0
如何解决此问题?捕获字符串并独立解析它
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
while(line.equals("")) {
System.out.println("Nothing entered - try again!");
line = sc.nextLine();
}
com = line.charAt(0);
失败的原因是nextLine
使用换行符;如果不输入任何内容,则字符串将被视为空,因为它是由nextLine
读取的。您希望检测到这一点,并允许用户重新输入值,直到他们输入非空字符串的内容
sc.nextLine().charAt(0);
这是字符串的第0个字符(字符串的第一个字母)
如果您不输入任何内容,字符串显然将为空,因此当尝试访问索引0时,它将抛出StringIndexOutOfBoundsException。您需要定义一个与用户输入相等的单个变量 i、 e: 然后,使用
individualvariable
with.equals比较字符串。简单来说,您不能只做com=sc.nextLine()
首先定义com(string,int,boolean),然后定义sc.nextLine()
等于(x,y等)的变量然后比较这两个变量
这使代码易于阅读,因此以我前面的示例为例,将其拆分为:
String individualvariable;
com = sc.nextLine();
while(individualvariable .equals (com))
{
}
我给你的第二段代码应该是最容易阅读的,也是最简单的
String individualvariable;
com = sc.nextLine();
while(individualvariable .equals (com))
{
}