我正在使用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”,但它不起作用。
你能帮我找到问题的解决方案吗?
答案 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