用一台扫描仪读取两个字符串

时间:2018-04-05 07:58:26

标签: java java.util.scanner

我有扫描仪,它首先读取标题,然后应该读取用户输入的两个单词,用空格划分并将它们放入导演姓名和导演姓氏中:但是使用下面的代码我得到错误:

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();

4 个答案:

答案 0 :(得分:2)

您需要使用nextLine方法获取输入。下面是我在eclipse中尝试的工作版本

编辑:根据问题中的新修改更新代码。每当输入整数并按Enter键时,换行符将作为下一个扫描程序的输入。因此,在获取输入后写入nextLine()。更新的代码按编辑的问题工作。

import java.util.Scanner;

public class Snippet {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
    System.out.println("Enter 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();
    scanner.nextLine();
    if(answer == 3)
        addBook();
}

private static void addBook() {
    System.out.println("Enter title: ");
    String title = scanner.nextLine();
    System.out.println("Enter director: ");
    String[] parts = scanner.nextLine().split(" ");
    String directorName = parts[0];
    String directorSurname = parts[1];
    System.out.println("title : " + title);
    System.out.println("directorname : " + directorName);
    System.out.println("directorsurname : " + directorSurname);
}
}

答案 1 :(得分:1)

除了使用scanner.nextLine()来消耗整行之外,你应该使用正确的正则表达式来表示至少一个空白字符。

String[] parts = scanner.nextLine().split("\\s+");

答案 2 :(得分:0)

Scanner.next()只会给您一个字,而是使用scanner.nextLine()

所以你最终得到了

String[] parts = scanner.nextLine().split(" ");

此外,将标题输入修改为:

title = scanner.nextLine();

答案 3 :(得分:0)

您的解决方案可行 - 但正如您所看到的,我编辑了问题,问题是我之前使用相同的扫描程序来调用addBook方法。

iframe