Java:通过输入字符串的标记读取标记

时间:2017-01-25 11:18:07

标签: java input java.util.scanner token

我正在使用Scanner类作为stdin来从keybord读取输入。 我会通过令牌读取令牌,直到行尾。 令牌由空格分隔。

这是我的代码:

Scanner in = new Scanner(System.in);

    int count=0;
    while(in.hasNextLine()){
        while(in.hasNext()){
            String s=in.next();
            System.out.println(s);
            if(s.equals("\n")) 
             break;
            count++;
        }
        break;
    }
    System.out.println(count);

问题在于,当我按下回车键时,它似乎认为它像一个空白区域,它永远不会从阻止中退出,所以它继续期待另一个输入。

从Linux退出并在Linux中结束程序的唯一方法是按ctrl + D(= enter)但我正在寻找另一种方式......

我尝试插入一个if语句,检查令牌是否为“\ n”,但它不起作用。

你能帮我找到问题的解决方案吗?

1 个答案:

答案 0 :(得分:2)

当与流一起使用时,in.hasNextLine()和in.hasNext()方法是阻塞的:如果没有新行或新令牌,它们将等到你写东西并再次按回车。

如果您只想要一行,可以使用以下内容:

package test;

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        int count=0;
        Scanner in =new Scanner(System.console().readLine()); //scanning just one line
        while(in.hasNext()){
            String s=in.next();
            System.out.println(s);
            count++;
        }
        System.out.println(count);
        in.close();
    }

}

注意: 如果从IDE执行此代码,则没有控制台,因此System.console()返回null。要从命令行运行它,您需要键入以下内容:

$ pwd
/home/user/development/workspace/test/bin
$ ls
test
$ ls test
Test.class
$ java -classpath /home/user/development/workspace/test/bin/ test.Test