学习JAVA控制台输入时,一个小小的问题困扰了我。原码如下:
import java.io.IOException;
public class test{
public static void main(String arg[]) throws IOException,NumberFormatException{
testing();
}
public static void testing() throws IOException,NumberFormatException {
byte[] b = new byte[1024];
int num = System.in.read(b);
String s = new String(b,0,num);
try{
int n = Integer.parseInt(s);
System.out.println(n);
}catch(NumberFormatException e){
System.out.println("Error!");
}
}
}
该段代码实现从控制台接收数据转换成string格式再转换成int型输出但该段代码在实际应用的过程中无论输入是什么总是输出Error!
于是我联想到之前学C\C++语言时输入缓冲区会多存一个回车字符的现象,怀疑此处是否也多读了一个回车导致抛出类型不匹配异常。
经过一番尝试我把代码中的String s = new String (b,0,num)中的参数num改为num-2就解决了问题。
但这也引发一个问题就是: 回车字符在这里占用的是两个字节吗?