用Java在标准输入中多次读取

问题描述 投票:0回答:1

哈哈,我一直在努力解决这个问题,虽然我觉得这很简单哈哈。

一点背景信息:我正在制作一个小程序来自动回答网络调查(使用Selenium WebDriver)。每项调查都是在用户和密码下完成的。我的目标是我的程序用他们的id(比如ID1:___,ID2:____等)问我问题,并为每个用户+传递做。

我创建了一个方法来从文本文件中获取用户和密码,并将它们保存到String of List [2]中。

    // Just a test list with the name (or id) of each question
    List<String> nombrePreguntas = new LinkedList<String>(Arrays.asList("nombre1", "nombre2", "nombre3", "nombre4"));

    // read users from file -> usuarios[0] = user, usuarios[1] = pass.
    List<String[]> usuarios = leerUsuarios("entrada.txt");

    for (String[] u : usuarios) {
        // print each user and pass
        System.out.println(u[0] + " - " + u[1]);
        // for each user+pass, read the questions and ask for their answer in stdin
        List<Integer> respuestas = leerRespuesta(nombrePreguntas);
        System.out.println(respuestas );
    }

对于第一个用户,这仅适用于ONCE。该程序要求4个问题的答案,然后打印出答案。之后,它只打印用户+传递,其中包含每个问题的名称和一个空的答案数组,如下所示:

usuario1 - pass1
nombre1: 1
nombre2: 2
nombre3: 3
nombre4: 4
[1, 2, 3, 4]
usuario2 - pass2
nombre1: nombre2: nombre3: nombre4: []
usuario3 - pass3
nombre1: nombre2: nombre3: nombre4: []

我不知道做我想做的最好的方法是什么。如果你找不到这方面的解决方案,我也会感谢一些关于替代方法的建议,以便从标准输入中获得每个用户+传递的答案。

这是从stdin读取的函数:

public static List<Integer> leerRespuesta(List<String> nombrePreguntas) {
    List<Integer> respuestas = new ArrayList<Integer>();
    Scanner in = new Scanner(System.in);
    // Para cada pregunta, habrá una respuesta
    boolean licencia = true;
    for (String np : nombrePreguntas) {
        // just a feature that I must implement
        if(licencia == false && (np.equals("LM2") || np.equals("LM3") || np.equals("LM4"))) {
            continue;
        }

        // Print the name/id of the question
        System.out.print(np + ": ");

        if(in.hasNextLine()) {
            String s = in.nextLine();

            while(!StringUtils.isNumeric(s)) {
                System.out.println("It must be a number.");
                System.out.print(np + ": ");
                if(in.hasNextLine())
                    s = in.nextLine();
            }

            if(np.equals("LM1") && s.equals("1"))
                licencia = false;

            respuestas.add(Integer.parseInt(s));
        }
    }
    in.close();
    return respuestas;
}

谢谢。

java stdin
1个回答
1
投票

您无法多次读取标准输入。 Java不支持this1。

您可以做的是读取标准输入一次并将其全部捕获为String。然后反复创建并使用StringReader中的ScannerString


1 ....因为典型的操作系统不支持它。

© www.soinside.com 2019 - 2024. All rights reserved.