我正在尝试了解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)
。我没有正确使用扫描仪对象,但有人可以帮我找到错误。
感谢。
答案 0 :(得分:0)
hasNext(pattern)
尝试将指定的模式与整个标记进行匹配。字符串“abcd12345abcd”没有分隔符,因此它构成一个标记。您的模式会查找由单个数字组成的标记,这显然不匹配。
findInLine(pattern)
尝试在行中的任何位置找到模式,因此第一个找到的数字将匹配。