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+"\n"+"年龄:"+age+"\n"+"工资:"+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+"\n"+"年龄:"+age+"\n"+"工资:"+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);
        }

 结果:

这样就可以跳出循环了!

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值