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

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

  • 处理字符串

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

public Scanner(String source);

使用示例如下:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {Scanner scan = new Scanner("Tom,Jerry,Spike,Alice,Bob,Carol");scan.useDelimiter(",");while (scan.hasNext()) {System.out.println(scan.next());}}
}

执行结果如下图所示:

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

  • 处理字符流

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

public Scanner(Readable source);

其示例代码如下所示:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {StringReader reader = new StringReader("Tom Jerry Alice Carol");Scanner scan = new Scanner(reader);scan.useDelimiter(Pattern.compile(" "));while (scan.hasNext()) {System.out.println(scan.next());}}
}

执行结果如下图所示:

  • 处理字节流

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

public Scanner(InputStream source);
public Scanner(InputStream source, String charsetName);
public Scanner(InputStream source, Charset charset);

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

示例代码如下所示:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {String classPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();Scanner scan = new Scanner(new FileInputStream(classPath + "Test.txt"));scan.useDelimiter("\n");while (scan.hasNext()) {System.out.println(scan.next());}}
}

执行结果如下图所示:

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

第一种方式:

Thread.currentThread().getContextClassLoader().getResource("");

第二种方式:

ScannerKeyBoardTest.class.getClassLoader().getResource("").getPath();

第三种方式:

ClassLoader.getSystemClassLoader().getResource("").getPath();

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

  • 处理文件
public Scanner(File source) throws FileNotFoundException;
public Scanner(File source, String charsetName)throws FileNotFoundException;
public Scanner(File source, String charsetName)throws FileNotFoundException;

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

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

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {String classPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();Scanner scan = new Scanner(new File(classPath + "Test.txt"), "UTF-8");scan.useDelimiter(" ");while (scan.hasNext()) {System.out.println(scan.next());}}
}

执行结果如下图所示:

  • 处理指定路径
public Scanner(Path source)throws IOException;
public Scanner(Path source, String charsetName) throws IOException;
public Scanner(Path source, Charset charset)  throws IOException;

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

示例代码如下所示:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {String classPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();Path path = Path.of(classPath.substring(1), "Test.txt");Scanner scan = new Scanner(path, StandardCharsets.UTF_8);scan.useDelimiter(" ");while (scan.hasNext()) {System.out.println(scan.next());}}
}

执行结果如下图所示:

  • 处理指定通道流
public Scanner(ReadableByteChannel source);
public Scanner(ReadableByteChannel source, String charsetName);
public Scanner(ReadableByteChannel source, Charset charset);

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

示例代码如下所示:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {String classPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();Scanner scan = new Scanner(new FileInputStream(classPath + "Test.txt").getChannel(),StandardCharsets.UTF_8);scan.useDelimiter(" ");while (scan.hasNext()) {System.out.println(scan.next());}}
}

执行结果如下图所示:

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

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

  • useDelimiter:该方法用于设置分隔符或者说读取文本的截止符,接受参数是一个正则表达式,可以是字符串形式也可以是Pattern对象。
  • hasNextXXX:该方法用于判断是否还有可读的字符。XXX表示基本数据类型的包装类、BigDecimal和BigInteger等。
  • nextXXX:该方法用于读取可读的字符。XXX表示基本数据类型的包装类、BigDecimal和BigInteger等。
  • findAll:该方法用于查看符合正则表达式的要求的数据。入参为一个正则表达式,可以是字符串形式,也可以是Pattern对象。
  • findAll方法的使用示例代码如下:
public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {Scanner scan = new Scanner("hello12world34tom2大家好314OK90");scan.useDelimiter(" ");scan.findAll("\\d+").forEach(r -> System.out.println(r.group()));}
}

执行结果如下图所示:

  • skip:该方法用于跳过扫描器开头的匹配指定正则表达式的信息。说白了,就是使用正则表达式忽略开头的符合要求的信息。示例代码如下所示:
public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {Scanner scan = new Scanner("大家伙才是真得好hello world");scan.skip("[\u4e00-\u9fa5]+");while (scan.hasNext()) {System.out.println(scan.next());}}
}

执行结果如下图所示:

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

示例代码如下:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {Scanner scan = new Scanner("大家伙才是真得好hello 结尾到了world 123");scan.useDelimiter(" ");while (scan.hasNext()) {String content = scan.findInLine("[\u4e00-\u9fa5]+");System.out.println(content);// 使扫描器往下走scan.next();}}
}

执行结果如下图所示:

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

示例代码如下图所示:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {Scanner scan = new Scanner("大家伙才是真得好hello 结尾到了world 123");scan.useDelimiter("\\d");System.out.println(scan.delimiter());}
}

执行结果如下图所示:

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

示例代码如下所示:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {Scanner scan = new Scanner("大家伙才是真得好hello 结尾到了world 123");scan.useDelimiter("\\d");System.out.println(scan.locale());}
}

执行结果如下图所示:

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

示例代码如下图所示:

public class ScannerKeyBoardTest {public static void main(String[] args) throws IOException {Scanner scan = new Scanner("大家伙hehe才是真得好hello 结尾到了world 123哦哦");scan.useDelimiter(" ");while (scan.hasNext()) {String msg = scan.findWithinHorizon("[\u4e00-\u9fa5]+", 5);System.out.println(msg);scan.next();}}
}

执行结果如下图所示:

Scanner类简要介绍相关推荐

  1. Java Scanner类的介绍及使用

    目录 1 什么是Scanner类 2 Scanner类的对象创建 1 查看类并导入类 2 查看构造方法 3 创建对象 3 Scanner类的基本方法 1 next() 方法 2 nextLine() ...

  2. Scanner类的简单用法介绍!

    Scanner是Java中的一个新特征,Java程序员可以通过Scanner类来获取用户的输入,帮助程序员接收从键盘输入的数据,对于程序员而言非常有帮助.当程序需要从键盘获取用户输入的命令或数据时,例 ...

  3. 一步步手动实现热修复(二)-类的加载机制简要介绍

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 本节课程主要分为3块: 1.一步步手动实现热修复(一)-dex文件的生成与加载 2.一步步手动实现热修复(二)-类的加载机制简要介 ...

  4. css中什么是伪类选择器?伪类选择器的简要介绍

    本章给大家带来css中什么是伪类选择器?伪类选择器的简要介绍.让大家可以了解在css中伪类选择器的作用,css伪类选择器有哪些分类等知识.有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. ...

  5. Java Scanner类的详细介绍(Java键盘输入)

    Java Scanner类的详细介绍(Java键盘输入) 一.Scanner类的简单使用 二.Scanner类的详细介绍 1.判断输入数据类型 2.next()与nextLine()的区别 3.求多个 ...

  6. java用scanner类_java中关于scanner类的详细介绍

    1.Scanner的实现步骤 第一步:在有效代码的第一行,通过import导入Scanner类!import java.util.Scanner; 第二步:通过new关键字实例化一个Scanner对象 ...

  7. 介绍Scanner类、Random类、ArrayList类的基本使用

    Scanner 的基本使用规则 我们可以通过Scanner类来获取用户的输入 基本语法: Scanner scanner = new Scanner(System.in); Random的基本使用规则 ...

  8. Scanner类和String类常用方法介绍

    Scanner的概述:用于获取用户的键盘输入 Scanner类的hasNextXxx()和nextXxx()方法: hasNextXxx()  判断下一个是否是某种类型的元素,其中Xxx可以是Int, ...

  9. Scanner类详解

    Scanner类用于获取键盘输入(是一个基于正则表达式的文本扫描器),它可以从文件.字符串.输入流中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同的构造器可以接收文件.字符串和输入 ...

最新文章

  1. JavaScript学习之对象
  2. 20年研发管理经验谈(十六)
  3. java解析nes_【JVM系列】一步步解析java执行内幕
  4. access开发精要(7)-定位记录、查找空值
  5. [目标检测] Faster R-CNN 深入理解 改进方法汇总
  6. 3月份GitHub上最热门的开源项目
  7. java 接口可以多继承
  8. Android10打断动画,Android开发(10) 动画(Animation)
  9. 坏了坏了,以后用/proc读取Linux系统信息可能要给联想交专利费了
  10. python中self和cls的区别
  11. 静态NAT、动态NAT、PAT(端口多路复用)的配置
  12. 《Android 应用案例开发大全(第3版)》——第1.3节Android开发环境的搭建
  13. 进制转换: 十进制转换成其他进制(一)
  14. python求直角三角形两边求锐角_在二元数组中求直角三角形坐标
  15. GIMP:图层蒙版应用小例
  16. 传统图像特征提取方法列表
  17. 阅读笔记(Every Document Owns Its Structure: Inductive Text Classification via Graph Neural Networks)
  18. 前端框架MVC和MVVM的理解
  19. Github学生包申请流程
  20. LSTM及peehole LSTM模型

热门文章

  1. [展览人秘籍]除了展会会刊(参展商名录)还能这样找客户
  2. 毕业设计 2023-2024年最新信息管理专业毕设选题题目推荐汇总
  3. 二建和一建应该如何复习备考?
  4. spring-boot项目:MySQLSyntaxErrorException: Table ‘spring_boot.user‘ doesn‘t exist
  5. 中信建投:容联云整体毛利率不断优化,多元化产品将助力营收增速
  6. C# 多线程一: Thread 的简单理解与运用
  7. 记录安装Manjaro踩过的那些坑,解决安装后进入grub 的问题
  8. Java中Runtime类详细总结
  9. 计算机网络之Socket编程(UDP)
  10. Spring整合Activemq