为什么findInLine(token)有效,但hasNext(token)不起作用



我正在努力理解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。对于hasNext(String)方法应该返回true的任何模式和字符串,它都不是return true。我没有正确使用扫描仪对象,但有人能帮我找出错误吗。

谢谢。

hasNext(pattern)尝试将指定的模式与整个令牌相匹配。字符串"abcd12345abcd"没有分隔符,因此它构成一个令牌。您的模式查找由一个数字组成的令牌,这显然是不匹配的。

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

最新更新