scanner.nextLine()实际上并没有提供下一行

时间:2010-08-11 12:07:11

标签: java java.util.scanner

我在Java中编写了一个非常简单的递归下降解析器,但是我附加到该文件的扫描程序存在一些问题。

private void ParseDataFields(Controller.TreeData data, java.util.Scanner scanner) {
        java.lang.String nextline;
        while(scanner.hasNextLine()) {
            nextline = scanner.nextLine().trim();
            if (nextline == "{") { // If we are with this, we are a new Child object declaration.
                if (data.CanHaveChildren()) {
                    ParseDataFields(data.CreateNewChild(), scanner);
                    continue;
                } else
                    FileValidationError("Attempted to give a child object to a data node that could not have one.");
            }
            if (nextline.endsWith("}")) // End of Child object data declaration
                return;
            ... parse the line

问题是当找到{时,方法会递归,但实际上没有采用下一行(有下一行)。它只返回相同的{令牌,这是无效的。

我一直在使用示例文件对其进行测试:

Name = scumbag
{
    Name = lolcakes
}
}

使用反射,我确认field = value语法工作正常。但是新孩子的开场令牌不是。

1 个答案:

答案 0 :(得分:2)

if (nextline == "{") { 

比较Java中的字符串应该使用String#equals()

if (nextline.equals("{")) {

字符串是Java中的对象,而不是基元。 ==将按引用比较对象,而不是按值。

另见: