System.in.read()
用于读取单个字符。
那为什么它允许用户输入尽可能多的字符直到他按下回车键?
为什么他按下一个键并返回字符时它不停止?
char ch = (char)System.in.read();
如果用户输入“example”,然后按回车,它采用ch
as e
。并丢弃其他字符。
如果有多个read()
,它会弄乱整个事情。
那么,为什么不只取单个字符然后返回呢?
System.in
是类型BufferedInputStream
。这种类型的流缓存输入数据,直到换行符被识别。以下代码段显示了输出中的类型。
System.out.println(System.in.getClass());
如果有多个 read(),它会弄乱整个事情。
那么,为什么不只取单个字符然后返回呢?
要解决此问题,您可以包装标准输入并改为使用 a 读取它Scanner
。
对于给定的输入:
abcd
1234
以下Scanner
代码将仅选择字符a
和1
.
// Local vars init
char ch1 = 0, ch2 = 0;
// Wrap the stdin with scanner
Scanner s = new Scanner(System.in);
if(s.hasNextLine()) ch1 = s.nextLine().charAt(0); // reads "abcd", picks just 'a'
if(s.hasNextLine()) ch2 = s.nextLine().charAt(0); // reads "1234", picks just '1'
System.out.println(ch1 + "," + ch2); // prints a,1
// Close after use
s.close();