我的代码没有按预期工作,它必须使用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>
为什么输出中有空行
答案 0 :(得分:2)
当您第一次致电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);
答案 1 :(得分:0)
只需将System.out.println(b);
替换为
int a = (int) b;
if (a != 13 && a != 10) {
System.out.println(b);
}
如果它的int值是换行和回车
,它将不会打印char