Scanner类的简单使用

Scanner类是Java中用来对文本进行扫描处理的类。下面我将简单介绍一下Scanner的使用。

Scanner类虽然有很多的构造器,但总体上来说,大致可以分为如下几种。

  • 处理字符串

处理字符串的构造器只有一个,其声明如下所示:

<code>

public

Scanner

(String source)

;/<code>

使用示例如下:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

​对于userDelimiter这个方法而言,可以接受的参数为一个字符串形式的正则表达式或一个正则表达式对象。

  • 处理字符流

处理字符流的构造器只有一个,其声明如下所示:

<code>

public

Scanner

(Readable source)

; /<code>

其示例代码如下所示:


Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • 处理字节流

对于处理字节流的构造器来说有三个,第一个是只接收字节流,而其余两个则是增加了编码(分别是字符串形式和编码对象Charset)。

<code>

public

Scanner

(InputStream source)

; /<code>
<code>

public

Scanner

(InputStream source, String charsetName)

;/<code>
<code>

public

Scanner

(InputStream source, Charset charset)

;/<code>

关于字节流的处理我只写一个例子,其余两个大家可以进行类比。

示例代码如下所示:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

​由于我的测试文件给类在同一个路径下,所以我这里使用了获取类路径的方法。其实获取类路径的方式大约有三种,分别如下:

第一种方式:

<code>

Thread

.currentThread

()

.getContextClassLoader

()

.getResource

(

""

);/<code>

第二种方式:

<code>

ScannerKeyBoardTest

.class

.getClassLoader

()

.getResource

("")

.getPath

();/<code>

第三种方式:

<code>

ClassLoader

.getSystemClassLoader

()

.getResource

(

""

)

.getPath

();/<code>

其中第一种方式是最常用的。后两种如果是在开启多线程的情况下,可能获取到的路径有误。

  • 处理文件
<code>

public

Scanner

(File source)

throws

FileNotFoundException

;/<code>
<code>

public

Scanner

(File source, String charsetName)

throws

FileNotFoundException

;/<code>
<code>

public

Scanner

(File source, String charsetName)

throws

FileNotFoundException

;/<code>

处理文件的例子和上面处理字节流的情况类似,区别在于这里只能接受文件对象,而上面接受的字节流对象除了是文件流对象外,还可以是别的流对象。

处理文件的示例代码如下所示:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • ​处理指定路径
<code>

public

Scanner

(Path source)

throws

IOException;

/<code>
<code>

public

Scanner

(Path source, String charsetName)

throws

IOException;

/<code>
<code>

public

Scanner

(Path source, Charset charset)

throws

IOException;

/<code>

处理指定路径的情况与上面处理文件和字节流类似,只不过构造器中需要接收的参数为Path对象。

示例代码如下所示:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • ​处理指定通道流
<code>public Scanner(ReadableByteChannel 

source

);/<code>
<code>

public

Scanner(ReadableByteChannel source,

String

charsetName);/<code>
<code>public Scanner(ReadableByteChannel 

source

, Charset charset);/<code>

处理指定通道流的情况与处理字节流、文件以及Path路径类似。

示例代码如下所示:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

​以上介绍的都是Scanner的各种构造器及其使用方式。

下面我再简单介绍一下Scanner一些常用的方法。

  • useDelimiter:该方法用于设置分隔符或者说读取文本的截止符,接受参数是一个正则表达式,可以是字符串形式也可以是Pattern对象。
  • hasNextXXX:该方法用于判断是否还有可读的字符。XXX表示基本数据类型的包装类、BigDecimal和BigInteger等。
  • nextXXX:该方法用于读取可读的字符。XXX表示基本数据类型的包装类、BigDecimal和BigInteger等。
  • findAll:该方法用于查看符合正则表达式的要求的数据。入参为一个正则表达式,可以是字符串形式,也可以是Pattern对象。
  • findAll方法的使用示例代码如下:
Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • skip:该方法用于跳过扫描器开头的匹配指定正则表达式的信息。说白了,就是使用正则表达式忽略开头的符合要求的信息。示例代码如下所示:
Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • ​findInLine:该方法是在当前行中查找符合正则表达式的字符。

示例代码如下:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • ​delimiter:该方法用于返回该扫描器的分隔符。

示例代码如下图所示:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • ​locale:该方法是返回该扫描器对象的语言环境。

示例代码如下所示:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

  • ​findWithinHorizon:该方法是在当前查找中查找前n(不包括n)个字符中查找符合正则表达式要求的字符。

示例代码如下图所示:

Scanner类的简单使用

执行结果如下图所示:

Scanner类的简单使用

​自此,Scanner类的使用就已经介绍完毕。


分享到:


相關文章: