java用一个扫描器读取两个字符串
我有一台扫描仪,它首先读取标题,然后读取用户键入的两个单词,用空格分隔,并将它们放入导演姓名和导演姓氏中:但根据下面的代码,我得到了错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at MainSystem.addBook(MainSystem.java:57)
at MainSystem.main(MainSystem.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
代码:
private static void addBook() {
System.out.println("\nEnter title: ");
title = scanner.next();
System.out.println("\nEnter director: ");
String[] parts = scanner.next().split(" ");
directorName = parts[0];
directorSurname = parts[1];
}
编辑: 使用本书中的“添加”方法时,可能也会出现以下问题:
System.out.println("\nEnter 0 for loading the Library." +
"\nEnter 1 for save and quit" +
"\nEnter 2 for list all the Books in the Library." +
"\nEnter 3 for add Book to the Library.");
int answer = scanner.nextInt();
# 1 楼答案
您需要使用nextLine方法获取输入。下面是我在eclipse中尝试的工作版本
编辑:根据问题中的新编辑更新代码。每当整数作为输入并点击回车键时,换行符作为输入进入下一个扫描仪。因此,在获取输入后编写一个nextLine()。更新的代码根据编辑的问题工作
# 2 楼答案
您的解决方案会起作用,但正如您所看到的,我编辑了这个问题,问题是我之前使用了相同的扫描仪来调用addBook方法
# 3 楼答案
除了使用
scanner.nextLine()
使用整行之外,还应该使用适当的正则表达式来表示至少一个空格字符# 4 楼答案
Scanner.next()
将只给您一个单词,请使用scanner.nextLine()
所以你最终得到了
String[] parts = scanner.nextLine().split(" ");
另外,将标题输入修改为:
title = scanner.nextLine();