来自用户的输入问题

时间:2012-10-26 15:12:23

标签: java user-input

我有来自以下形式的用户的输入:

1234 abc def gfh
..
8789327 kjwd jwdn
stop

现在如果我使用Scanner并依次使用

Scanner sc=new Scanner(System.in);
String t=sc.nextLine();
while(!t.equals("stop"))
{
    int i=sc.nextInt();
    int str=sc.nextLine();
    t=sc.nextLine();
}

我有什么方法可以得到   I = 1234   str =“abc def gfh” ... 依此类推...当用户进入停止时停止

我想分别接受数值和字符串...而不使用正则表达式。 此外,我想停止输入关键字“停止”。

3 个答案:

答案 0 :(得分:1)

您永远不会更改t的值,因此除非您的文件的第一行是stop,否则while条件将始终为true。

答案 1 :(得分:1)

首先,你对所接受的输入一无所知,只是忽略它以接受下一个输入。

其次,scanner.nextLine()返回下一行读取的字符串。要单独获取令牌,您需要拆分string读取以获取它们。

第三,你应该检查你的时间,是否有下一个输入使用scanner#hasNextLine,如果它等于true,那么只有你应该在你的while循环中读取你的输入。

如果您想单独阅读每个令牌,最好使用Scanner#next方法,该方法返回下一个令牌读取。

此外,您想阅读integersstrings,因此您还需要测试是否有整数。您需要使用Scanner#hasNextInt方法。

好的,因为你想在每一行分别阅读integerstring

以下是您可以尝试的内容: -

while (scanner.hasNextLine()) {  // Check whether you have nextLine to read

    String str = scanner.nextLine(); // Read the nextLine

    if (str.equals("stop")) {  // If line is "stop" break
        break;
    }

    String[] tokens = str.split(" ", 1);  // Split your string with limit 1
                                          // This will give you 2 length array

    int firstValue = Integer.parseInt(tokens[0]);  // Get 1st integer value
    String secondString = tokens[1];  // Get next string after integer value
}

答案 2 :(得分:1)

您的代码:

Scanner sc=new Scanner(System.in);
String t=sc.nextLine();
while(!t.equals("stop"))
{
    int i=sc.nextInt();
    int str=sc.nextLine();
    t=sc.nextLine();
}

首先int str=sc.nextLine();错误,因为nextLine()返回字符串。据我说,你能做的是:

 Scanner sc=new Scanner(System.in);
    String t=sc.nextLine();
    int i;
    String str="";
    while(!t.equals("stop"))
    {
        int index=t.indexOf(" ");
        if(index==-1)
           System.out.println("error");
        else{
               i=Integer.parseInt(t.substring(0,index));
               str=t.substring(index+1);
        }
        t=sc.nextLine();
    }

我希望它有所帮助。