import java.util.Scanner;public class SystemIn { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt(); // 读int
double d = scanner.nextDouble(); // 读double
String str = scanner.nextLine(); // 读一行 System.out.println( "i = " + i + " , d = " + d + " , str = "+ str);
scanner.close();
}}
输入“1244 1244.0 eclipse”后,输出为“i = 1244 , d = 1244.0 , str = eclipse”
若输入“1244”,回车,“1244.0”,回车,结果就数了出来。输出为“i = 1244 , d = 1244.0 , str = ”public int nextInt() 将输入信息的下一个标记扫描为一个 int。
public String nextLine() 此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。 何解?
有些书上明确指出nextLine方法用在nextInt,nextDouble方法后要重新创建新的Scanner对象
具体为什么我也不清楚
你改用next()就可以了。
我手边不方便,你可以试一试在scanner.close();前加上一句System.out.println("test");看看“i = 1244 , d = 1244.0 , str = ”和“test”之间是不是空了两行。
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt(); // 读int
double d = scanner.nextDouble(); // 读double
scanner.skip("\\W*"); // 跳过空白
String str = scanner.nextLine(); // 读一行System.out.println( "i = " + i + " , d = " + d + " , str = "+ str);
scanner.close();
Scanner先要进行分词,然后才开始匹配一下分词是否符合正则表达式(用hasNext(pattern))。
此输入中转换成字符串为:
str="1244\n"+"1244.0\n”+"\n"
经过分隔后:1244,1244.0,空
所以,结果就是那样了。
分隔后结果是“1244,1244.0,空”,但str="1244\n"+"1244.0\n”+"\n"最后一个"\n"是怎么来的?6楼的方法可以实现要求,但是“scanner.skip("\\W*"); // 跳过空白 ”,跳过了些什么?当我们按下回车的时候,标准输入端输入的是什么?