0

を使用して、ArrayList<String>名前付きを循環させたいのですが、一度に 1 つの文字列を分析して、その文字列に応じて によって特定の状態になるようにしたいと考えています。オブジェクト トークンは「テーブル」として読み取られることになっています。fileContentIterator interfaceswitch statement

        void process() {

        Iterator fileIterator = fileContent.iterator();

        int state = 0;
        Object token = null;
        switch (state) {

        case 0:
            token = fileIterator.next();
            if (token.equals("Table")) {
                System.out.println(token);
                state = 1;
            } else {
                System.err.println("Corrupt file format at state 0: "+ token);
                System.exit(0);
            }
            break;
        }

    }

これは状態を 1 に切り替えるのではなく、次のように出力します。

'Corrupt file format at state 0: Table'

そのため、オブジェクトトークンを「テーブル」として正しく読み取っているように見えますが、ステートメントでは読み取っていないようです'if (token.equals("Table"))'。私も試してみました'if (token == ("Table"))'

誰か助けてくれませんか?

4

2 に答える 2

0

「オブジェクトトークンを「テーブル」として正しく読み取る」と考える理由は何ですか? がif()失敗した場合は、tokenとは異なるものに違いありませんTable。私の推測では、出力は誤解を招くものです。代わりにこれを試してください:

System.err.println("Corrupt file format at state 0: ["+ token + "]");

トークンを囲む角括弧は、予期しない空白文字を見つけるのに役立ちます。

またtoken、 は文字列ではない可能性がありますが、 が呼び出されたTableときに返されることに注意してくださいtoString()(これは、文字列に追加した場合に発生します)。

于 2013-11-06T12:57:38.757 に答える
0

Looks like you want to equate Strings, try this

    void process() {

    Iterator fileIterator = fileContent.iterator();

    int state = 0;
    String token = "";  // notice this
    switch (state) {

    case 0:
        token = ((String)fileIterator.next()).trim();  // notice this
        if (token.equals("Table")) {
            System.out.println(token);
            state = 1;
        } else {
            System.err.println("Corrupt file format at state 0: "+ token);
            System.exit(0);
        }
        break;
    }

}
于 2013-11-06T12:56:50.360 に答える