[英]A simple java program output is not as expected with IO
我有一個未按預期工作的代碼,它必須使用System.in.read()方法執行某些操作。 該程序旨在從控制台讀取,直到我按“ c”或“ C”
import java.io.*;
public class Input{
public static void main(String args[])throws IOException{
char b;
outer:
do{
b= (char)System.in.read();
System.out.println(b);
if(b=='c'||b=='C'){
break outer;
}
} while(true);
}
}
輸出是
D:\ex\1>java Input
d
d
c
c
D:\ex\1>
為什么輸出中有空行
第一次調用read
時,它將讀取'd'
並用新行將其打印(因為您使用了println
而不是print
)。 這解釋了第一行。 在循環的第一次迭代之后,再次調用read
。 這次,它讀取回車符'\\r'
。 調用第三次read
,它將讀取換行符'\\n'
。 這就是為什么有3條新線的原因。
這些換行符從哪里來?
每次輸入一個字符時,您都按“輸入”對嗎? 那是新線! 由於您使用的是Windows,因此會插入\\r\\n
。 在Mac上,換行只是\\n
。 這就是為什么在Mac上運行時,您的代碼生成2行而不是3行的原因。
解決方案是不讀取新行:
do{
b= (char)System.in.read();
if (b == '\r' || b == '\n') continue;
System.out.println(b);
if(b=='c'||b=='C'){break outer;}
}while(true);
或者您可以使用Scanner
:
char b;
Scanner sc = new Scanner(System.in);
outer:
do{
b= sc.findWithinHorizon(".", 0).charAt(0);
System.out.println(b);
if(b=='c'||b=='C'){break outer;}
}while(true);
只需替換System.out.println(b);
與
int a = (int) b;
if (a != 13 && a != 10) {
System.out.println(b);
}
如果它的int值是換行和回車,它將不打印字符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.