为什么java.util.Scanner next()。charAt(0)返回“ {”,而我的nextCharIs(scanner,“ {”)方法返回false?

问题描述 投票:0回答:1

我正在用Java和我的read Factor方法编写一个递归的体面解析器,正在检查扫描仪中的下一个字符是否为“ {”。我使用方法nextCharIs(Scanner in, Char c)确定下一个字符是否与模式匹配。在此代码中,扫描仪中的下一个字符为“ {”,但该方法返回false。 nextChar返回“ {”,而nextCharIs(in,"{")返回false。为什么会这样?

char nextChar(Scanner in) {
    return in.next().charAt(0);
}

boolean nextCharIs(Scanner in, char c) {
    return in.hasNext(Pattern.quote(c+""));
}
java java.util.scanner
1个回答
0
投票

来自Oracle documentation:“扫描程序使用分隔符模式将其输入分解为令牌,该<>。”没有使用scanner.hasNext(Pattern.quote("{"))操作的任何额外图层。如果您还有一些new Scanner(...anyText...);,那么就是这种情况。我必须将“ {”替换为“ x”,否则我的降价检查会出现问题:

anyText匹配“ x” n“ xx” n设“ x x” y->仅第一个“ x”满足令牌的要求

© www.soinside.com 2019 - 2024. All rights reserved.