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

标签 java input java.util.scanner token

我使用 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/

相关文章:

java - 如何关闭在 JAVA 方法中打开的扫描仪

java - 我想在关闭后重用套接字(java)

java - 错误 : Could not find or load main class Main (unix)

java - 如何让 Eclipse 知道 Maven 存储库中的 OSGI 包(本地和|远程)

android - 奇怪的跳跃在 Android MotionEvent 触摸位置

c++ - 是否可以将输入用作对字符串的调用?

java - Service层异常处理

javascript - ng-repeat 中的 <input> 元素在编辑输入后不会获得焦点

java - 扫描仪 - 使用分隔符正则表达式解析代码值

java - 从控制台读取不同类型的数字时减少代码重复