📜  scan.hasnext 做了什么 (1)

📅  最后修改于: 2023-12-03 15:34:51.358000             🧑  作者: Mango

Scanner.hasNext()作用介绍

在Java中,Scanner是一个用于解析基本数据类型和字符串的类。Scanner.hasNext()是Scanner类中的一个方法,它的作用是检查输入流中是否还有下一个标记(token)。本文将为程序员对Scanner.hasNext()的作用进行介绍,以及该方法具体实现的过程。

Scanner.hasNext()方法的实现

Scanner.hasNext()方法是Scanner类中最常用的方法之一,它会在输入流中查找下一个标记(token)。Scanner类中,标记(token)通常指的是输入流中的一个字符串或数字。当执行Scanner.hasNext()方法时,它将检查是否可以从输入流中解析出下一个标记。

下面是Scanner.hasNext()的代码片段:

public boolean hasNext() {
   ... // implementation details
}

在Scanner类的实现中,Scanner.hasNext()方法通过调用Scanner.next()方法来检索下一个标记。如果能成功检索到标记,则该方法会返回true;否则,它会返回false。

public boolean hasNext() {
   ensureOpen();
   saveState();
   while (!sourceClosed) {
       if (position >= buf.limit()) {
           compact();
           fill();
       }
       for (int index = position; index < buf.limit(); index++) {
           if (delimiterTable[lastDelimiter = buf.get(index)] >= 0) {
               currentPosition = index;
               return true;
           }
       }
       if (needInput) {
           readInput();
       } else {
           break;
       }
   }
   restoreState();
   return false;
}

上面的代码片段展示了Scanner.hasNext()方法的具体实现细节。在这个方法的实现中,Scanner类使用了一个缓冲区来存储输入流,并且在需要时才从输入流中读取更多数据。当Scanner.hasNext()方法被调用时,Scanner类会尝试从缓冲区中查找下一个标记。如果无法在缓冲区中找到下一个标记,则Scanner将从输入流中读取更多数据,直到Scanner检索到下一个标记。

Scanner.hasNext()方法的使用

Scanner.hasNext()方法可以被用于循环读取输入流中的所有标记。下面是一个简单的例子演示如何使用Scanner.hasNext()方法:

import java.util.Scanner;

public class Example {
   public static void main(String[] args) {
       String input = "hello world";
       Scanner scanner = new Scanner(input);

       while (scanner.hasNext()) {
           System.out.println(scanner.next());
       }

       scanner.close();
   }
}

在这个例子中,我们首先创建了一个Scanner对象,并且将字符串“hello world”作为输入流传递给Scanner对象。然后,我们使用while循环调用Scanner.hasNext()方法来读取输入流中的所有标记,并将标记打印到控制台。

结论

Scanner.hasNext()方法是Scanner类中一个非常有用的方法。它可以用于循环读取输入流中的所有标记,并且可以很方便地用于基本数据类型和字符串的解析。在使用Scanner.hasNext()方法时,程序员应该注意能否正确解析所有输入数据。同时,在使用Scanner类时,程序员也应该注意正确定义分隔符。