我正在努力理解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)
试图在行中的任何位置找到一个模式,因此第一个找到的数字将匹配。