【发布时间】:2019-11-17 05:24:58
【问题描述】:
假设我有以下(愚蠢的)java 程序,它在main 和aux 之间来回循环,只要键入y:
import java.util.Scanner;
public class Minimal {
public static void main(String[] args) {
System.out.println("in main...");
Scanner scanner = new Scanner(System.in);
String s;
while(scanner.hasNextLine()) {
s = scanner.nextLine();
System.out.println(s);
if(s.equals("y")) {
aux();
System.out.println("in main...");
}
}
}
public static void aux() {
System.out.println("in aux...");
Scanner scanner = new Scanner(System.in);
String s;
while(scanner.hasNextLine()) {
s = scanner.nextLine();
System.out.println(s);
if(s.equals("y")) {
return;
}
}
}
}
但是,当我跑步时
$ javac Minimal.java
$ printf "y\ny\ny\ny\ny\ny\ny\n" | java Minimal
在 bash 中,我得到的答案与运行时不同
$ java Minimal
然后输入(交互式)y,然后输入<ENTER> --- 似乎等同于上面自动输入的printf。有什么想法吗?
【问题讨论】:
-
从
aux返回后,您永远不会打印in main...。 -
它与“从标准输入读取的不同方式”无关,与您的输入有关。 Java 无法使用管道标准输入来区分来自用户的输入或来自另一个进程的输入。那是标准输入的“标准化”部分。
-
谢谢---所以问题是为什么
y后跟<ENTER>的序列是不同于printf "y\ny\ny\ny\ny\ny..." -
现在编辑您的问题并解释如何它是不同的。带有实际输出的屏幕截图或示例会话会有所帮助。
标签: java bash java.util.scanner stdin