很多关于上述几个方法的介绍都非常晦涩,很复杂,我们在处理相关问题时只需要记住以下规律即可:
(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之前),依此类推。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/124299.html