Scanner类(next,nextLine,nextInt)的用法与常见问题

一、常见的方法

.next():

    1、一定要读取到有效字符后才可以结束输入。 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。 next() 不能得到带有空格的字符串。

.nextInt():

这个方法跟next()一直,只是规定了数据类型是Int。

.nextLine():

    1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。 2、可以获得空白。

二、常见的问题

1.next()与.nextLine()的连用:

public class TestNextLine {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);


        System.out.println("请输入你的年龄:");

        int age = sc.nextInt();

        System.out.println("请输入你的姓名:");

        String name = sc.next();

        System.out.println("请输入你的工资:");

        String salary = sc.nextLine();

        System.out.println("你的信息如下:");

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


    }
}

结果如下:

这里就会出现,我们输入的时候,准备输入工资的时候,直接跳过输出,没有让我们进行输入工资~~~!!!而且工资哪项是null.

原因是:

nextLine()会把nextInt(),next(),nextDouble(),nextFloat()的结束换行符作为字符串读入,进而不需要从键盘输入字符串nextLine便已经转向了下一条语句执行。

解决办法:

在每一个nextInt(),next(),nextDouble(),nextFloat()后都加一个nextLine()语句,将被next()去掉的Enter过滤掉。

修改后的代码:

public class TestNextLine {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);


        System.out.println("请输入你的年龄:");

        int age = sc.nextInt();

        System.out.println("请输入你的姓名:");

        String name = sc.next();
        sc.nextLine();

        System.out.println("请输入你的工资:");

        String salary = sc.nextLine();

        System.out.println("你的信息如下:");

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


    }
}

结果:成功!

还有一个列子,我们输入12 32,分别用nextInt()与nextLine()去读取,会出现这样的情况:

Scanner sc = new Scanner(System.in);
        int i = sc.nextInt();
        String s1 = sc.nextLine();
        System.out.println(i);
        System.out.println(s1);

结果:

32前面还有空格,这就是nextLine的神奇,会把next()的空格读取下来!

2.While与.nextLine()的问题

比如:输入下列几组字符串,存入一个数组里。

abc
def
ghi

既然是字符串,那么我们就使用nextLine就好了。写了如下代码:

Scanner sc = new Scanner(System.in);
        List<String> list = new ArrayList<>();

        while (sc.hasNextLine()){
            String s = sc.nextLine();
      
            list.add(s);
        }

但是结果如下:

一直让我输入!!!! 一直停不下来。

为了让这个停下来,我们要去判断读取的那个字符串是否为空,如果为空就跳出循环。

代码如下:

Scanner sc = new Scanner(System.in);
        List<String> list = new ArrayList<>();

        while (sc.hasNextLine()){
            String s = sc.nextLine();
            if(s.equals("")) break;
            list.add(s);
        }

结果:

这样就可以跳出循环了!

经验分享 程序员 微信小程序 职场和发展