日期:2014-05-20  浏览次数:20782 次

虚心请教!在Java中Scanner虚拟键盘的问题。请您发表下意见!!!我不胜荣幸
今天突然遇到一个问题,在这里请请教了!
Scanner input=new Scanner(System.in);

System.out.println("请输入你的姓名:");
String name=input.next();

System.out.println("请输入你的生日:");
String time=input.nextLine(); //这里的是nextLine()

今天偶然遇到了这个问题,
当你输入姓名完毕后,,,按下Enter键
后面的生日就不让我输入的了,之间跳过。 最后发现是next()和nextLine()的问题

但是还是不懂为什么???
我知道可以把上面也改成String name=input.next();
还有就是把生日和姓名换位置
在就是用
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String str;
try {
str = stdin.readLine();
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
等等!!! 
但是我就是不明白用了next()后,在用nextLine()就不能输入了。
希望能给个详细的解释!!! 
谢谢! 麻烦您发表下意见

------解决方案--------------------
next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。

而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。


------解决方案--------------------
nextLine()自动读取了被next()去掉的Enter作为他的结束符
------解决方案--------------------
next()会把你按下的Enter看作是键盘输入的"\n",意思就是在
System.out.println("请输入你的姓名:");
String name=input.next();
System.out.println("请输入你的生日:");
String time=input.nextLine(); //这里的是nextLine()

这段代码中,当按下Enter时在结束input.next();的同时,将Enter建看作“\n”赋值给了input.nextLine(); 。分析下面运行结果:
请输入你的姓名:
chm
请输入你的生日:

当我输入chm后按下Enter键后,你的生日已经被赋值为" \n"