String a = in.nextLine();和String a = in.next();的区别
当发现String a = in.nextLine();不能按照自己的要求执行时,可以换为String a = in.next();执行。
nextline读取到的是换行符(ENTER)之前的所有字符,可以得到所有的字符,包括在任意位置的空格,一直到ENTER截止,并且最终消除ENTER字符
而Line字符只在读取到第一个字符时才开始读取之后字符,当遇到空格或者换行符,就是任何有间隙的符号,就会停止读取。然后保存到虚拟机当中。
在下一次执行nextline时就读取剩下的字符
(因为nextline读取把回车键之前的读取,然后消除回车键字符,但是next读取字符后,不会消除回车键字符)
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//读取nextline的字符读取回车前的所有字符,并且消除全部字符
System.out.print("输入nextline1字符串:");
String st1 = input.nextLine();
System.out.println("nextline1字符串为" + st1);
//读取next中的字符,只从第一个不是空格的字符开始读取到再次出现空格结束
// 并且清除第一个停止输入前的所有元素
System.out.print("输入next1字符串:");
String st2 = input.next();
System.out.println("next1字符串为" + st2);
//验证nextline是否还能接受到用户要输入的数据
System.out.print("输入nextline2的字符串:");
String st3 = input.nextLine();
//这里输入之前还保留在回车键前的所有数据,并且清除所有的元素和回合键字符
System.out.println("nextline2的字符串为" + st3);
//到这一步nextline才能接受来自用户要输入的信息
System.out.print("输入nextline3的字符串:");
String st4 = input.nextLine();
System.out.println("nextline3的字符串为" + st4);
//next会输出空格前的元素,但是不会清除掉这些。这里为了验证这一点
System.out.print("输入next2的字符:");
String st5 = input.next();
System.out.println("next2的字符为" + st5);
//验证出这里的nextline不呢正常输入
System.out.print("输入nextline4的字符:");
String st6 = input.nextLine();
System.out.println("nextline4的字符为:" + st6);
//到这里才能正常输入
System.out.print("输入nextline5的字符");
String st7 = input.nextLine();
System.out.println("nextline5的字符为:" + st7);
}
}
运行结果如下:
当然,next与nextInt()、nextDouble()、nextFloat()一样,读取一样,会清除掉读取到的元素,但是不会清除回车键。当它们之间互相运用时,没有什么太大影响,但是当遇到nextLine时就会遇到影响,在上面代码也有演示
解决办法,就是在要用到nextLine时,在之前载打一个nextLine是为了读到清除掉之前存在的回车键字符,使得下一个nextLine可以正常运用。