方法获取非空白输入

时间:2018-08-01 18:54:43

标签: java

我已经制定了接受非空白输入的方法,以便可以验证列表中的输入。

public String getNonBlankInput(String text){

    Scanner scan = new Scanner(System.in);

    System.out.println(text);
    String input = scan.nextLine();
    while (input.isEmpty() || input.equals(" ")) {
        System.out.println("Input is empty.");
        System.out.println(text);
        input = scan.nextLine();
    }
    scan.close();

    return input;

}

我想在将对象添加到我的LinkedList的方法中使用此方法。这是此方法的代码:

public void addMenu(){
    String log = getNonBlankInput("Enter login: ");
    String pass = getNonBlankInput("Enter password: ");
    String web = getNonBlankInput("Enter website: ");

    Entry newEntry = new Entry(web,log,pass);
    edao.addEntry(newEntry);
}

问题是,无论我输入的登录名,密码或网站有什么异常,

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at com.password.PasswordManager.data.InputValidation.getNonBlankInput(InputValidation.java:12)
at com.password.PasswordManager.input.MenuImplementation.addMenu(MenuImplementation.java:15)

任何人都知道这里有什么问题吗?在创建方法getNonBlankInput之前,一切正常。

3 个答案:

答案 0 :(得分:0)

问题可能是您正在创建和关闭多个Scanner实例。本质上,当您关闭System.in时,无法再次打开它。建议在Scanner中创建一个addMenu()实例,并将该扫描器传递给getNonBlankInput()并在edao.addEntry()之后关闭扫描器。

public void addMenu(){
    Scanner scan = new Scanner (System.in);

    String log = getNonBlankInput("Enter login: ", scan);
    String pass = getNonBlankInput("Enter password: ", scan);
    String web = getNonBlankInput("Enter website: ", scan);

    Entry newEntry = new Entry(web,log,pass);
    edao.addEntry(newEntry);
    scan.close();
}

public String getNonBlankInput(String text, Scanner scan){
    ...
}

答案 1 :(得分:0)

您正在java.util.Scanner方法中使用addMenu的三个实例。您只需要使用java.util.Scanner的一个实例。删除java.util.Scanner和Scanner的close()的实例,然后将其添加为类变量。

static Scanner input = new Scanner(System.in);

请确保在完成输入后关闭输入。

答案 2 :(得分:0)

我尝试了您的代码,是在创建Scanner目标System.in的多个实例时,先关闭后再附加此错误。

我建议您只使用一个Scanner或不要关闭它,这项工作也可以。

示例

public void addMenu() {
    Scanner scan = new Scanner(System.in);

    String log = getNonBlankInput("Enter login: ", scan);
    String pass = getNonBlankInput("Enter password: ", scan);
    String web = getNonBlankInput("Enter website: ", scan);

    scan.close();
    ...
}

public String getNonBlankInput(String text, Scanner scan){

    System.out.println(text);
    String input = scan.nextLine();
    do {
        if (input.isEmpty() || input.equals(" ")) {
            System.out.println("Input is empty.");
            System.out.println(text);
            input = scan.nextLine();
        }

    } while ((input.isEmpty() || input.equals(" ")) && scan.hasNextLine());

    return input;

}

示例2

public void addMenu() {
    String log = getNonBlankInput("Enter login: ");
    String pass = getNonBlankInput("Enter password: ");
    String web = getNonBlankInput("Enter website: ");
    ...
}

public String getNonBlankInput(String text){
    Scanner scan = new Scanner(System.in);
    System.out.println(text);
    String input = scan.nextLine();
    while (input.isEmpty() || input.equals(" ")) {
        System.out.println("Input is empty.");
        System.out.println(text);
        input = scan.nextLine();
    }
    //scan.close();
    return input;
}