java.util.Scanner在JDK1.5之后引入,Scanner类是一个专门用来进行输入流处理的的程序类。在此之前,对于输入流的处理一开始使用InputStream,然后出现了BufferedReader类用来解决其存在的一些不足之处,但是BufferedReader类默认的换行模式成了最大的缺点。最后被Scanner类取代。
Scanner类是一个简单的文本扫描器,这个类的最大优点首先是可以更加方便的处理各种数据类型,其次我们也可以使用正则表达式来对输入流数据进行更好的处理。
Scanner分隔符模式默认情况下匹配空格,我们可以使用next()方法将得到的数据转换成不同类型的值。接下来,我们需要了解一下这个类中主要的几个方法。
1:public boolean hasNextXXX():判断是否有指定类型数据,如果没有指定类型则为String
2:public XXX nextXXX():取得指定类型的数据,如果没有指定类型则为String
3:public Scanner useDelimiter(Pattren pattern):自定义分隔符
Scanner类从本质上讲是一个文本扫描器,最实用的地方就是获取控制台输入。如果没有Scanner,想要获取控制台输入,是一件很麻烦的事情。在介绍如何使用Scanner之前,我们先来看一下它的构造方法。
从构造方法我们可以看出Scanner确实是一个很好用的文本扫描器,下面我来举例一下。
Scanner scanner = new Scanner(System.in); String Message = null; if(scanner.hasNext()){ Message = scanner.next(); System.out.println(Message); } scanner.close();
我们先来看一下结果:
我输入的是:12345_456。但是Message存储的只有“12345”。这里要总结一个知识点:nextXXX()读取相应数据类型的值的时候,默认以空格作为分割符来分割文本。但是我们是可以指定新的分隔符的。
除此之外,因为Scanner的构造方法多样,我们可以用很多种方式获取到Scanner的对象,所以我们就可以轻易的扫描并按照需求分割文件已达到我们想要的结果。
Scanner也可以使用正则表达式对文本进行扫描与区分,我举个例子
Scanner scanner = new Scanner(System.in); String Message = null; if(scanner.hasNext("\\d{3}-\\d{3}-\\d{3}")){ Message = scanner.next(); System.out.println(Message); }else{ System.out.println("输入错误,正确格式为:xxx-xxx-xxx"); } scanner.close();
最后介绍的是使用Scanner对文件进行读取。
Scanner scanner = new Scanner(new FileInputStream(new File("C:\\Users\\Lenovo\\Desktop\\练习.txt"))); scanner.useDelimiter("\r\n");//将分隔符修改成换行符 String Message = null; while(scanner.hasNext()){ Message = scanner.next(); System.out.println(Message); } scanner.close();
因为分隔符修改成了换行符,所以完整的读取出了文件内的所有信息。
有关Scanner的总结就到这里。