三者区别

next()、nextInt()、nextLine()都是Scanner内置的方法,他们的区别主要在于对于对空格的处理方式不同,以及返回值不同。
对空格的处理
使用nextLine()方法,空格不作为两个字符串的间隔,而是看作字符串的一部分;
使用next()和nextInt()方法遇到空格时会停止读取,返回的结果为空格前读取到的部分。
返回值
nextInt()的返回值为int类型;
next()、nextLine()的返回值均为String类型;
当然,如果输入的是数值,也可以用nextLine()接收,然后使用Integer.parseInt(scan.nextLine())进行转换;

使用举例

Scanner scan=new Scanner(System.in);
System.out.println("开始输入内容:");           
System.out.println("内容:"+scan.nextLine());  

结果:
开始输入内容:
12 34 56
内容:12 34 56

Scanner scan=new Scanner(System.in);
System.out.println("开始输入内容:");
while(scan.hasNext()){
    System.out.println("内容:"+scan.next());             //nextInt()用法与next()类似
}

结果:
开始输入内容:
12 34 56
内容:12
内容:34
内容:56

注意事项

next()、nextInt()读取数据后指针还在当前行,如果紧跟nextLine(),读取数据会出错,举例如下:

Scanner sc=new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
System.out.println("请输入你的年龄:");
int age=sc.nextInt();

System.out.println("姓名:"+name);
System.out.println("年龄:"+age);

结果:

请输入你的姓名:
name
请输入你的年龄:
18
姓名:name
年龄:18

此时结果是正常的,但是如果我们将sc.nextLine()与sc.nextInt()调换顺序,我们试一下:

Scanner sc=new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("请输入你的姓名:");
String name=sc.nextLine();

System.out.println("姓名:"+name);
System.out.println("年龄:"+age);

结果:

请输入你的年龄:
18
请输入你的姓名:
姓名:
年龄:18

此时可以看到,输入结果出错了,解决方案如下:

Scanner sc=new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
sc.nextLine();        //添加sc.nextLine();
System.out.println("请输入你的姓名:");
String name=sc.nextLine();

System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐