Scanner hasNext()、hasNextLine()

文章目录

    • **Java Scanner hasNext() vs. hasNextLine()**
      • **总览**
      • **hasNext()**
        • **使用自定义分隔符**
      • **hasNextLine()**
      • **总结概括**

Java Scanner hasNext() vs. hasNextLine()

总览

Scanner类是一个方便的工具,可以使用正则表达式原语类型和字符串,在java5中被引入到util包中。

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

hasNext()

hasNext()检查输入,如果有另一个非空格字符则返回true。

我们还应该注意一些关于默认分隔符的细节:

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

让我们看一个例子,看看hasNext()如何使用默认的分隔符。首先,我们将准备一个输入字符串来帮助我们探索Scanner的解析结果。

String INPUT = new StringBuilder()
    .append("magic\tproject\n")
    .append("     database: oracle\n")
    .append("dependencies:\n")
    .append("spring:foo:bar\n")
    .append("\n")  // Note that the input ends with a blank line
    .toString();

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

Scanner scanner = new Scanner(INPUT);
while (scanner.hasNext()) {
     
    log.info(scanner.next());
}
log.info("--------OUTPUT--END---------")

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

[DEMO]magic
[DEMO]project
[DEMO]database:
[DEMO]oracle
[DEMO]dependencies:
[DEMO]spring:foo:bar
[DEMO]--------OUTPUT--END---------

使用自定义分隔符

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

让我们看看hasNext()next()如何使用自定义分隔符的另外一个示例。这里重用上一个示例中的输入。

跳过。。

hasNextLine()

hasNextLine()方法检查Scanner对象中是否还有其它的行,无论该行是否为空。

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

int i = 0;
while (scanner.hasNextLine()) {
     
    log.info(String.format("%d|%s", ++i, scanner.nextLine()));
}
log.info("--------OUTPUT--END---------");

让我们看看输出的结果。

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

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

总结概括

在本文中,我们了解到ScannerhasNextLine()方法检查输入中是否含有另外一行,而不管该行是否为空。
hasNext()使用分隔符检查另外一个标记。

https://www.baeldung.com/java-scanner-hasnext-vs-hasnextline

你可能感兴趣的:(Coding,java)