我使用Scanner
通过这个简单的代码从我的Java项目中的控制台获取输入:
char com = ' ';
Scanner sc = new Scanner(System.in);
com = sc.nextLine().charAt(0);
当我输入我预期的命令(a,b,c,d ...)时,它工作正常,但如果我在没有输入命令的情况下按下键盘的Enter按钮,我会收到此错误消息并且应用程序崩溃:
线程中的异常" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0
如何解决此问题?
答案 0 :(得分:0)
sc.nextLine().charAt(0);
这是字符串的第0个字符(字符串的第一个字母)。
如果你没有输入任何东西,那么String显然是空的,所以当试图访问索引0时,它会抛出一个StringIndexOutOfBoundsException。
答案 1 :(得分:0)
您需要定义一个等于用户输入的个人变量。
即:
String individualvariable = sc.nextLine();
然后,使用带有.equals的individualvariable
来比较字符串。简单来说,你不能先做com = sc.nextLine()
,定义com(string,int,boolean),定义sc.nextLine()
等于(x,y等)的变量; 然后比较两个变量。
这使得代码易于阅读,因此请使用我之前的示例并将其拆分:
String individualvariable;
com = sc.nextLine();
while(individualvariable .equals (com))
{
}
我给你的第二段代码应该是最容易阅读的,而且最简单。
答案 2 :(得分:-2)
捕获字符串并改为独立解析。
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
读取该字符串将被视为空。您想要检测到这一点,并允许用户重新输入值,直到他们输入的内容不是空字符串。