当我从"System.out.println"中删除"ln"时,cin.read((要求我在下一行输入,但是当我放回"ln"时,在它问我另一个输入之前有4个空格,为什么?
InputStreamReader cin = new InputStreamReader(System.in);
char c;
do {
c = (char) cin.read();
System.out.println(c);
} while(c != 'q');
InputStreamReader
不是为从System.in
的客户端输入中读取字符而设计的。 它是从字节到字符的桥梁。InputStreamReader.read()
确实会逐个字节读取,包括那些表示由 enter 类型生成的行分隔符的字节。
因此,当您输入标准输入例如x
然后单击Enter
时,根据您的操作系统读取2或3个字节并将其解码为字符。x
r
n
适用于基于Windows操作系统,x
n
适用于基于Unix操作系统。
当您注意到 4 个断行(3 个用于读取字节 + 1 个在您键入输入触摸后自动添加(时,您很可能在 Windows 上。
要从 std 输入中读取文本,Scanner
更合适,例如:
Scanner cin = new Scanner(System.in);
String word;
do {
word = cin.next();
System.out.println(word);
} while (!word.equals("q"));