我使用 Scanner 类作为标准输入来从键盘读取输入。 我会逐个标记地读取插入的字符串,直到行尾。 token 由空格分隔。
这是我的代码:
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);
问题是,当我按 Enter 时,它似乎将其视为一个空白,并且它永远不会从 while block 中退出,因此它继续等待另一个输入。
在 Linux 中退出 while 并结束程序的唯一方法是按 ctrl+D (=enter),但我正在寻找另一种方法...
我尝试插入一个 if 语句来检查 token 是否为“\n”,但它不起作用。
你能帮我找到问题的解决方案吗?
最佳答案
in.hasNextLine() 和 in.hasNext() 方法在与流一起使用时是阻塞方法:如果没有新行或新标记,它们将等到您写入内容并再次按 Enter 键。
如果您只想要一行,您可以使用类似以下内容的内容:
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
关于Java:按输入字符串的标记读取标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41850237/