有没有理由为什么程序员使用System.in.read()的char?

时间:2013-11-27 16:31:28

标签: java escaping system.in

我注意到以下代码行存在很多。 (例如在本网站上。)

char ch = (char) System.in.read();  // uses a char, and requires a cast.

现在测试特定字符击键,ASCII值或转义序列等。

if (ch == 'a' || ch == 65 || ch == '\n' || ch == 13) System.out.print("true");

使用上面的char是否比以下代码行提供了任何好处,它使用了一个int?

int i = System.in.read();  // uses an int, which requires no cast.

int变量“i”可以在上面显示的if语句中使用。

2 个答案:

答案 0 :(得分:2)

根本没有理由进行演员表演。这很好

int i = System.in.read();
if(i == 'a'){
   // do something
}

您可以这样做,因为'a'是int范围内的值。

另外,请注意,在阅读文件等时,直接对char 进行强制转换可能会出现问题,因为InputStream.read()所做的是byte而不是char {1}}。 char是两个字节宽。

答案 1 :(得分:2)

两种方法都不正确。从System.in读取字符的正确方法是使用InputStreamReader(如果提供正确的功能,则使用Scanner)。原因是InputStream.read()读取单个字节而不是字符,而某些字符需要读取多个字节。您还可以指定将字节转换为字符时要使用的字符编码。

Reader rdr = new InputStreamReader(System.in);
int i = rdr.next();
if (i == -1) {
    // end of input
} else {
    // normal processing; safe to cast i to char if convenient
}