API文档:http://www.yiibai.com/java/util/java_util_scanner.html
Scanner:中文意思是扫描仪,也就是将一份数据从一个地方扫描并显示到另外一个地方。
Scanner的类方法:
1.Scanner.hasNextLine() 、Scanner.nextLine()
<pre name="code" class="java"> String str = "ni hao" +"\n"+"wo shi jiming";
Scanner scan = new Scanner(str);
System.out.println(scan.nextLine());
System.out.println(scan.hasNextLine());
System.out.println(scan.nextLine());
System.out.println(scan.hasNextLine());
输出结果:
ni hao
true
wo shi jiming
false
String str = "ni hao" +"\n"+"wo shi jiming";
Scanner scan = new Scanner(str);
<span style="color:#cc0000;background-color: rgb(204, 204, 204);">// System.out.println(scan.nextLine());</span>
System.out.println(scan.hasNextLine());
System.out.println(scan.nextLine());
System.out.println(scan.hasNextLine());
注释掉红色那一行
输出结果
true
ni hao
true
String str = "ni hao" +"\n"+"wo shi jiming";
Scanner scan = new Scanner(str);
System.out.println(scan.hasNextLine());
System.out.println(scan.nextLine());
System.out.println(scan.hasNextLine());
System.out.println(scan.nextLine());
调换hasNextLine()和nextLine()的顺序
输出结果
true
ni hao
true
wo shi jiming
上面三次测试给我们的信息是,scanner好比一个带游标或者指针的扫描仪,调用其hasNextLine()好比将游标向前探索直到遇到一个换行符,如果这个过程中遇到字符串对象则返回true并且游标复位。调用其nextLine()方法其实就是游标向前探索直到遇到一个换行符,此时并不复位,而是游标直接定位到目标数据的下一行,并返回探索过程中检测到的数据包括空格。
2.next()、nextLine()
Scanner scan = new Scanner(System.in);
System.out.println("next方式接收:");
String nextStr1 = scan.next();
String nextStr2 = scan.next();
System.out.println("next()输入结果:\n"+nextStr1+nextStr2);
System.out.println("nextLine方式接收:");
String nextLineStr = scan.nextLine();
String nextLineStr2 = scan.nextLine();
System.out.println("nextLine()输入结果:\n"+nextLineStr+"\n"+nextLineStr2);
1.next方式接收:
2.ni hao
3.next()输入结果:
4.nihao
5.nextLine方式接收:
6.ni hao
7.nextLine()输入结果:
8.
9.ni hao
其中红色字体为控制台的输入,绿色字体为输出。不知你有没有注意到第八行输出为空。这一行输出是nextLineStr中存的数据,为什么是一个空行呢?
先说一下next()扫描的方式,next()每当遇到一个空格或者换行都会停止扫描并返回数据,但数据里并不包含空格,并且游标停留在换行符前面。这时执行第一个nextLine(),消化掉换行符(游标跳到下一行),但此时返回的数据是空的,并不包含换行符。(否则例子中就会空出两行)测试一下发现返回数据里面包含一个空格。原理我就不是很清楚了。