Java scanner.nextLine()不';我没有真正说出下一句话
我已经用Java编写了一个非常简单的递归下降解析器,但是我附加到该文件的扫描器有一些问题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(
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中的对象,而不是原语。=
将通过引用而不是值来比较对象
另见:
{==”{
,但{”==新字符串(“{”)
肯定不是。这就是这里发生的情况。我没有想到,如果条件在本不应该出现的情况下失败,也会产生我遇到的问题。谢谢您的正确答案。
if (nextline.equals("{")) {