用户名,密码,性别都是字符串(String)数据类型,
该数据类型的数据从控制台上接收的方法如下:
System.out.print("\n请输入管理员的用户名: ");
Scanner input = new Scanner(System.in);
String name = input.next(); 或者用 String name = input.nextLine();
next() 和 nextLine()都可以接收字符串,但是用 next() 会有问题!!!
打印结果: 键盘输入完 回车
再次运行代码,打印结果 好奇怪?
再次运行代码,打印结果 好奇怪?
再次运行代码,打印结果 好奇怪?
为啥是这种输出呢?
next()方法:
1、一定要读取到有效字符后才可以结束输入。
Eg:一直按回车键,不输入任何内容,不会结束输入的
next在没有读到有效字符前会把空格、Tab、Enter(回车键)自动去掉
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、将输入的数据作为字符串接收。以空格、Tab、Enter结束接收。
当输入空格后表示结束
只有输入有效字符后才将其后面输入的空格作为结束
代码示例
总结:next(),nextInt(),nextDouble(), nextShort(),nextByte()等等方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个空格或换行符时,结束扫描,获取扫描到的内容,也就是说获得第一个扫描到的不含空格、换行符的单个字符串。
nextLine():
1、以Enter回车键为结束符,也就是说 nextLine()方法可以接收是回车之前的所有字符。(除了nextLine()会处理空格,别的方法都不会处理)
代码示例
打印结果
2、可以获得输入有效字符之前遇到的空格。
那使用nextLine()方法接收字符串一定不会有问题吗?
代码示例
运行结果会发现 还没输入 经济舱还是头等舱 程序就结束了
代码示例
运行结果,会发现当打印第一个整数后,直接跳过输入字符串
到输入第二个整数
next(),nextInt(),nextDouble(), nextShort(),nextByte()等等方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个空格或换行符时,结束扫描,获取扫描到的内容,也就是说获得第一个扫描到的不含空格、换行符的单个字符串。
原因:
之前调用过nextInt(),next(),nextDouble(),nextFloat()等等方法
然后在调用nextLine()
nextLine()会把nextInt(),next(),nextDouble(),nextFloat()等等方法的结束换行符(回车键)作为字符串读入,进而没有从键盘输入字符串nextLine便已经转向了下一条语句执行。
解决办法一:
在nextInt(), nextDouble(),nextFloat()等等方法后加一个nextLine()语句,
将Enter(回车键)接收过滤掉。 然后再使用nextLine()来读取下一行输入。
代码示例
运行结果
如果程序中又要接收整数 又要接收小数 又要接收其它类型 在接收字符串前面加上nextLine()语句即可。