0

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 構文が正常に機能することを確認しました。しかし、新しい子の開始トークンはそうではありません。

4

1 に答える 1

2
if (nextline == "{") { 

Java で文字列を比較するには、String#equals().

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

文字列は Java のオブジェクトであり、プリミティブではありません。は==、値ではなく参照によってオブジェクトを比較します。

以下も参照してください。

于 2010-08-11T12:08:54.697 に答える