gpt4 book ai didi

java - System.in.read() 行为我无法解释

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:57 25 4
gpt4 key购买 nike

class E92StringDemo {

public static void main(String args[]) throws java.io.IOException {

String strObj1 = "First String";

for (int i = 0; i < strObj1.length(); i++) {

System.out.print(strObj1.charAt(i));
System.in.read(); //just to pause the execution till i press enter key

}
}
}

我希望输出如下:

F
i
r
s
t...

但是输出是这样的:

F
ir
st
S
tr
in
g

我不确定每次按 enter 键 (\n) 时为什么会在一行中显示 2 个字符?

我正在运行 windows 8 并使用命令提示符通过 javac 运行文件。

最佳答案

问题

System.in.read() 只有在标准输入流(由 System.in 表示)中没有要读取的数据时才会暂停应用程序的执行。

但是在控制台中,当您按下 ENTER 时,会发生两件事:

因此,如您所见,如果您想在每次下一次迭代中暂停循环,则需要在离开当前迭代之前清空输入流中的数据。但是 System.in.read() 一次只读取 一个 字符,在你的情况下 \r 离开 \n 用于下一次迭代(所以没有暂停)。

因此,在暂停再次可用之前,您需要在一次迭代中阅读两次。

解决方案

如果您想以独立于操作系统的方式摆脱这个问题,请使用 BufferedReader#readLine()Scanner#nextLine,例如:

String strObj1 = "First String";
try(Scanner sc = new Scanner(System.in)){//will automatically close resource
for (int i = 0; i < strObj1.length(); i++) {
System.out.print(strObj1.charAt(i));
sc.nextLine();
}
}

这些方法还解决了在按下 enter 之前放置潜在额外字符的问题,因为它们中的每一个也将被放置在标准输入流中,这将需要额外的 .read() 调用。


* 以及在按回车键之前提供的其他潜在字符

关于java - System.in.read() 行为我无法解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43254898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com