在写一个程序的时候,我的本意是读取一个整数之后,再读取其后的一整行,在整数之后,会有换行输入,其输入形式如下:
但是在写了一个测试程序之后发现了一个问题,程序如下:
4
+ 1 2
- 1 2
* 1 2
/ 1 2
|
package cn.edu.shu.test;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int numOfInt = in.nextInt();// 读取一个整数
System.out.println("numOfInt->" + numOfInt);
while (in.hasNext()) {
String str = in.nextLine();
String strs[] = str.split(" ");
System.out.println("strs.length=" + strs.length);
System.out.println("str=" + str);
for (String string : strs) {
if ("".equals(string)) {
System.out.println("string是\"\"");
}
if (" ".equals(string)) {
System.out.println("string是\" \"");
}
if (" ".equals(string)) {
System.out.println("string是\" \"");
}
}
}
}
}
当我输入测试数据之后,运行结果如下:
4
numOfInt->4
+12
strs.length=1
str=
string是""
strs.length=1
str=+12
-12
strs.length=1
str=-12
*12
strs.length=1
str=*12
/12
strs.length=1
str=/12
其中红色数据是输入数据,黑色数据是输出数据,乍一看很奇怪的输出,仔细想想之后,是因为nextInt()读取完了之后,并没有换行操作,紧接着调用nextLine()方法读到的数据是“4”之后的空格,并且当你用一个空格去匹配读取的内容的时候,返回true,比如我用"".equals(string)返回true,我用“一个空格”.equals(string)返回false,我用“两个空格”.equals(string)还是返回false,所以说,用nextLine()读取的数据只要是空格,其对数量并不做比较,就认为是一个空串,所以第一次nextLine()读取的是空串,其输出的length是1 ,第二次,才读取到换行符之后的我的输入数据,并且正确输出了。