Java scanner.nextLine()不';我没有真正说出下一句话

Java scanner.nextLine()不';我没有真正说出下一句话,java,java.util.scanner,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(

我已经用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语法工作正常,但新子项的开始标记不正常

if (nextline == "{") { 
在Java中比较字符串应该使用

字符串是Java中的对象,而不是原语。
=
将通过引用而不是值来比较对象

另见:

我认为字符串是内部的,因此具有相同值的任何两个字符串都将具有相同的引用。这仅适用于常量表达式的结果字符串,例如代码中的文本。请参阅Java语言规范,第三版,3.10.5。@DeadMG:以下是正确的:
{==”{
,但
{”==新字符串(“{”)
肯定不是。这就是这里发生的情况。我没有想到,如果条件在本不应该出现的情况下失败,也会产生我遇到的问题。谢谢您的正确答案。
if (nextline.equals("{")) {