-4

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

1234 abc def gfh
..
8789327 kjwd jwdn
stop

现在,如果我使用扫描仪并反过来使用

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" ... 等等...并在用户输入停止时停止

我想分别接受数值和字符串......不使用正则表达式。我也想停止使用关键字“stop”进行输入。

4

3 回答 3

1

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

于 2012-10-26T15:15:15.573 回答
1

首先,你对接受的输入什么都不做,只是忽略它来接受下一个输入。

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

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

如果要分别读取每个令牌,最好使用Scanner#next方法,该方法返回下一个读取的令牌。

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

好的,因为您想在每一行上单独integer阅读。string

您可以尝试以下方法:-

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
}
于 2012-10-26T15:20:43.113 回答
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();
    }

我希望它有所帮助。

于 2012-10-26T15:41:54.653 回答