为什么findInLine(令牌)有效但hasNext(令牌)不起作用

时间:2017-01-05 21:44:26

标签: java java.util.scanner

我正在尝试了解Scanner类及其方法。我已了解findInLine方法的工作原理,但我无法理解hasNext(String)next(String)方法的工作原理。

这是我的代码。

import java.util.Scanner;

public class ScannerTest {

    public static void main(String[] args) {

        hasNextTest("\\d");
        //findInLineTest("\\d");
    }

    public static void findInLineTest(String token) {
        Scanner s = new Scanner(System.in);
        System.out.println("Input source string :");
        System.out.flush();
        String str = null;
        while (( str = s.findInLine(token)) != null) {
            System.out.println(str);
        }
        System.out.flush();
        s.close();
    }

    public static void hasNextTest(String token) {
        Scanner s = new Scanner(System.in);
        System.out.println("Input source string :");
        System.out.flush();
        System.out.println(s.hasNext(token));
//      while (s.hasNext(token)) {

//          System.out.println(s.next(token));
//      }
        System.out.flush();
        s.close();
    }

}

我无法理解的部分是如果我传递给扫描仪字符串" abcd12345abcd"或者说任何其他具有数字的字符串,方法hasNext("\\d")不会返回true。对于return true方法应该返回true的任何模式和字符串,它不会hasNext(String)。我没有正确使用扫描仪对象,但有人可以帮我找到错误。

感谢。

1 个答案:

答案 0 :(得分:0)

hasNext(pattern)尝试将指定的模式与整个标记进行匹配。字符串“abcd12345abcd”没有分隔符,因此它构成一个标记。您的模式会查找由单个数字组成的标记,这显然不匹配。

另一方面,

findInLine(pattern)尝试在行中的任何位置找到模式,因此第一个找到的数字将匹配。