Java 为什么findInLine(令牌)有效,而hasNext(令牌)无效';T
我试图理解Scanner类及其方法。我已经理解了Java 为什么findInLine(令牌)有效,而hasNext(令牌)无效';T,java,java.util.scanner,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
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的任何模式和字符串,它不会返回true。我没有正确使用扫描仪对象,但有人能帮我找到错误吗
谢谢。hasNext(模式)
尝试将指定模式与整个令牌匹配。字符串“abcd12345abcd”没有分隔符,因此它构成一个标记。您的模式将查找由一个数字组成的令牌,该数字显然不匹配
findInLine(pattern)
另一方面,尝试在行中的任何位置查找模式,以便第一个找到的数字匹配。“对于hasNext(String)方法应返回true的任何模式和字符串,它都不会返回true。”对于“abcd12345abcd”是true,对于\\d
,它显然是false,因为下一个标记不是数字。这是我的输出-输入源字符串:abcd1234abcd FALSE“abcd1234abcd”是数字吗?看起来不像。hasNext(String)
的文档是否表明它在下一个标记中寻找与模式匹配的东西,比如findInLine
呢?哦,我现在明白了。它看不到整个字符串的内部。但如果我的模式是“12”,输入字符串是“12”,它会按预期打印12两次。但是如果我提供“123412”作为输入,“12”作为模式,那么唯一的匹配是12次。因此,这种方法首先通过在空格之间拆分输入字符串,将其拆分为标记,然后查找匹配项,当下一个标记为34时,while循环失败。是的,这是正确的。