几句话直观理解java中Scanner类的next()、nextLine()、nextInt()

很多关于上述几个方法的介绍都非常晦涩,很复杂,我们在处理相关问题时只需要记住以下规律即可:

(1)Scanner是一个扫描器,对于键盘输入或者文件中的数据,先存到缓存区等待读取,它判断读取结束的标示是:空格,回车,tab 等;
(2)next()和nextInt()方法读取到任意间隔符(如空格和回车)就结束,nextLine()读取到回车结束也就是“\r”,next()返回值为String类型,nextLine()返回值为String类型,nextInt()返回值为Int类型。

读取结束后光标(这里理解为读取起点)会移到当前结束位置后,如果接着读上一次输入的内容或者连续读取文件,会从光标的最新位置开始读

返回值为String类型的好处就是不管输入的是字符串还是数字,都会判断为字符串,并正确输出。

目录

1.从键盘输入读取数据时

2.从txt文件中读取数据时


1.从键盘输入读取数据时

通过System.in获取键盘输入数据时,scanner = new Scanner(System.in)语句出现一行就输入一次,按回车(换行键结束输入当次输入),所以每次输入值的最后一个字符是回车符。

输入的内容取决于紧跟该语句的方法类型,分情况如下:

(1)如果紧跟的是nextInt()语句,则输入内容开头必须以“整数”或者“空格 整数”的形式,如:

import java.util.Scanner;

public class MyDemo {
    public static void main(String[] args) throws FileNotFoundException {

        Scanner scanner = new Scanner(System.in);//出现一行就输入一次,按回车(换行键结束输入)
        int m=scanner.nextInt();//由于紧跟输入语句的是nextInt()方法,所以上面输入的内容的开头必须是整数,或为空格+整数
        System.out.println("键盘输入以整数开头,输出的是"+m);//打印结果
        scanner = new Scanner(System.in);
        int n=scanner.nextInt();
        System.out.println("键盘输入空格 整数开头,输出的是"+n);//打印结果

    }
}

输出结果为:

 

 (2)如果紧跟的是nextLine()语句,则键盘输入的内容随意,语句会获取输入的全部内容,因为方法的读取结束符为回车,回车键是当前内容输入结束时必须要按的(记住nextLine()语句返回值是String类型),程序如下:

import java.io.FileNotFoundException;
import java.util.Scanner;

public class MyDemo {
    public static void main(String[] args) throws FileNotFoundException {

        Scanner scanner = new Scanner(System.in);//出现一行就输入一次,按回车(换行键结束输入)
        String m=scanner.nextLine();//由于紧跟输入语句的是nextLine()方法,所以上面输入的内容随意,语句会获取输入的全部内容
        System.out.println("键盘输入以整数开头,输出的是"+m);//打印结果
        scanner = new Scanner(System.in);
        String n=scanner.nextLine();
        System.out.println("键盘输入以字符开头,输出的是"+n);//打印结果

    }
}

输出结果为:

 (3)如果紧跟的是next()语句,则键盘输入的内容也随意,但语句只读到输入内容的第一个间隔符位置(记住next()语句返回值也是String类型)

import java.io.FileNotFoundException;
import java.util.Scanner;

public class MyDemo {
    public static void main(String[] args) throws FileNotFoundException {

        Scanner scanner = new Scanner(System.in);//出现一行就输入一次,按回车(换行键结束输入)
        String m=scanner.next();//由于紧跟输入语句的是nextLine()方法,所以上面输入的内容随意,语句读到输入内容中的第一个间隔符为止
        System.out.println("键盘输入以整数开头,输出的是"+m);//打印结果
        scanner = new Scanner(System.in);
        String n=scanner.next();
        System.out.println("键盘输入以字符开头,输出的是"+n);//打印结果
        scanner = new Scanner(System.in);
        String k=scanner.next();
        System.out.println("键盘输入以空格开头,输出的是"+k);//打印结果

    }
}

输出结果为:

所以不管是 next()还是nextInt()语句,对于键盘输入内容的开头为空格时,都不会将空格作为分隔符,而是会读取空格后第一个符合所需类型的元素。但是nextLine()语句会将输入对象开头第一个空格也读取。

(4)当连续读取键盘的输入内容时

import java.util.Scanner;

public class MyDemos {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//输入
        String m=scanner.next();
        System.out.println("读取第一个字符串,到空格结束,光标移到空格处,输出的是"+m);
        int n=scanner.nextInt();
        System.out.println("读取上次结束位置后的第一个整数,光标移到整数后空格处,输出的是"+n);
        String k=scanner.nextLine();
        System.out.println("从上次光标的最后位置读到换行符处,输出的是"+k);
    }
}

输出结果:

  

2.从txt文件中读取数据时

位于项目文件夹的/res/MyDemo.txt文件中保存着以下数据:

运行以下程序:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class MyDemo {
    public static void main(String[] args) throws FileNotFoundException {
        String path = "res/";
        String filename = "MyDemo.txt";
        Scanner scanner = new Scanner(new File(path + filename));
        String str=scanner.nextLine();
        System.out.println("str:"+str);
        int m=scanner.nextInt();
        System.out.println("m:"+m);
        String str2=scanner.nextLine();
        System.out.println("str2:"+str2);
        String str3=scanner.next();
        System.out.println("str3:"+str3);
        int p=scanner.nextInt();
        System.out.println("p:"+p);

    }
}

得到如下结果:

本例是对同一个文件内容的连续读取,所以需要判断光标(上一次读取结束的位置)的位置

nextLine()读取到回车结束,而文件中第一行6后面才有换行符,所以读到6结束,光标来到下一行

而next()和nextInt()方法读取到任意间隔符(如空格和回车)就结束,第二行中1后面就有空格符,所以m读到1就结束,光标移到1之后(-3之前),依此类推。

  • 22
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寒冢人家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值