Java小白,记录学习Java的点点滴滴
从控制台读取数据:
一、i = System.in.read()
该方法读取的是字节流,每次read只能读取一个字节,并且返回的是该字节的ASSIC码
例如:
int i = 0;
while(i!=-1){
i = System.in.read(); //read只读一个字符
System.out.println(i); //返回的是相应字符的ASIIC码
}
System.exit(1);
看其它朋友的博客说是遇到-1就结束,还没验证成功,输出结果为:
1234
49
50
51
52
10
我输入的数据为1234,输出的为49 50 51 52 10,从输出可以看出,read是每次只读入一个字节,并输出ASSIC码。
最后一个10是代表“\n”换行的ASSIC。
二、Scanner扫描读入数据。
Scanner sc = new Scanner(System.in);
System.out.println(sc.nextLine());
Scanner读入字符分为sc.next(),和sc.nextLine(),二者略有不同。
nextLine()以回车作为结束符,回车之前的所有字符都会读入包括空格,tab,逗号等,而next在读到有效字符前,会自动去掉空格,Tab,读到有效字符之后遇到空格,Tab,回车就结束。
先看nextLine
例如:
Scanner sc = new Scanner(System.in);
args[0] = sc.nextLine();
结果:
12 34 56
12 34 56
输入的时12 34 56,其中包含空格,而输出也是12 34 56,所以nextLine把回车之前的所有字符都读了进来。
再看next
例如:
args[1] = sc.next();
结果:
12 34 56
12
输入的数据为12 34 56,包含空格,输出直接为12,可以看出next遇到空格就结束了。
注:在next和nextLine连用的时候
要把nextLine放在前面,把next放在后面,否则的话会出现错误。
因为next遇到空格就结束,这样当你想输入带有空格或者Tab的字符串时,next只读取了一部分,另一部分被下一个next或nextLine读取了。
例如:
Scanner sc = new Scanner(System.in);
args = new String[2];
while(sc.hasNext()){
args[0] = sc.next();
args[1] = sc.next();
System.out.println(args[0]+"\r\n"+args[1]+"\r\n");
}
结果:
12 ab
12
ab
我本来的输入是把“12 ab”给argu[0],点击回车再给arg[1]赋值,可是一点击回车程序就赋值完毕arg[0] = 12 arg[1] = ab
明显的错误。
可以这样更改:
args[0] = sc.nextLine();
args[1] = sc.next();
结果:
12 ab
90
12 ab
90
这样arg[0] = 12 ab arg[1] = 90。
OK了。