Java最高

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程

1.概述

扫描仪类是一个方便的工具,可以使用正则表达式解析基本类型和字符串java.utilJava 5中的包。

在这个简短的教程中,我们将讨论its金宝搏官网188behasNext ()hasNextLine ()方法。尽管这两种方法一开始看起来很相似,但它们实际上执行的检查是完全不同的。

您还可以阅读更多关于多功能扫描器类的信息金宝搏官网188be在这里的快速指南

2.hasNext ()

2.1。基本用法

hasNext ()方法检查扫描仪在其输入中有另一个标记。一个扫描仪使用匹配的分隔符模式将其输入分解为标记空格默认情况下。也就是说,hasNext ()检查输入和返回真正的如果它有另一个非空白字符。

我们还应该注意一些关于默认分隔符的细节:金宝搏官网188be

  • 空格不仅包括空格字符,还包括制表符(\ t),换行(\ n),更多的字符
  • 连续空白字符被视为单个分隔符
  • 输入末尾的空行不会被打印出来,也就是说,hasNext ()返回为空白行

让我们看一个如何做到这一点的例子hasNext ()使用默认分隔符。首先,我们将准备一个输入字符串来帮助我们研究S罐头解析结果:

String INPUT = new StringBuilder() .append("magic\tproject\n") .append(" database: oracle\n") .append("dependencies:\n") .append("spring:foo:bar\n") .append("\n") //注意输入以空行结束。tostring ();

接下来,让我们解析输入并打印结果:

扫描器扫描器=新建扫描器(输入);while (scanner.hasNext()) {log.info(scanner.next());} log.info ("-------- 输出——结束 ---------")

如果我们运行上面的代码,我们会看到控制台的输出:

[DEMO]spring:foo:bar [DEMO]--------OUTPUT——END---------

2.2。与自定义分隔符

到目前为止,我们已经看到了hasNext ()使用默认分隔符。的扫描仪提供了一个useDelimiter(字符串模式)方法这允许我们更改分隔符。一旦改变了分隔符,则hasNext ()方法将使用新的分隔符而不是默认的分隔符进行检查。

让我们来看另一个例子hasNext ()next ()使用自定义分隔符。我们将重用上一个示例中的输入。

在扫描器解析匹配字符串的标记后依赖关系:,我们将把分隔符改为冒号(:)这样我们就可以解析和提取依赖项的每个值:

while (scanner.hasNext()) {String token = scanner.next();if ("dependencies:".equals(token)) {scanner.useDelimiter(":");} log.info(令牌);} log.info ("-------- 输出——结束 ---------");

让我们看看结果输出:

[DEMO] spring [DEMO]foo [DEMO]bar [DEMO]--------OUTPUT——END---------

太棒了!我们已经成功地提取了依赖关系,然而,还是有一些意想不到的换行问题。我们将在下一节中看到如何避免这些问题。

2.3。与正则表达式作为分隔符

让我们回顾一下最后一节中的输出。首先,我们注意到有一个换行符(\ n”之前)春天”。我们将分隔符改为":”后,“依赖关系:“获取令牌。参数后的换行符依赖关系:现在成为下一个代币的一部分。因此,hasNext ()返回真正的然后换行就打印出来了。

出于同样的原因,在"hibernate和最后的空行成为最后的标记的一部分,所以两个空行与hibernate”。

如果我们可以使用冒号和空格作为分隔符,那么“dependencies”值将被正确解析,我们的问题将得到解决。为了实现这个目标,让我们改变useDelimiter(“:”)电话:

scanner.useDelimiter (": | \ \ s + ");

: | \ \ s +这是一个匹配单个":"或一个或多个空白字符的正则表达式。通过这个修复,输出变成:

[DEMO]spring [DEMO]foo [DEMO]bar [DEMO]--------OUTPUT——END---------

3.hasNextLine ()

hasNextLine ()方法检查是否有另一行扫描仪对象,无论行是否为空。

我们再来看看相同的输入。这一次,我们将在输入的每一行前面添加行号hasNextLine ()nextLine ()方法:

int i = 0;while (scanner.hasNextLine()) {log.info(String.format("%d|%s", ++i, scanner.nextLine())));} log.info ("-------- 输出——结束 ---------");

现在,让我们看看我们的输出:

[DEMO]1|magic project [DEMO]2| database: oracle [DEMO]3|dependencies: [DEMO]4|spring:foo:bar [DEMO]5| [DEMO]--------OUTPUT——END---------

正如我们预期的那样,将打印行号,最后一个空行也在那里。

4.结论

在本文中,我们已经了解了这一点扫描仪hasNextLine ()方法检查输入中是否还有其他行,无论该行是否为空,而hasNext ()使用分隔符检查另一个标记。

与往常一样,示例的完整源代码是可用的在GitHub。

Java底部

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程
本文评论关闭!