Java Scanner空命令问题

时间:2015-09-06 18:54:50

标签: java

我使用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

如何解决此问题?

3 个答案:

答案 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读取该字符串将被视为空。您想要检测到这一点,并允许用户重新输入值,直到他们输入的内容不是空字符串。