【问题标题】:Java: Using Iterator in Switch StatementJava:在 Switch 语句中使用迭代器
【发布时间】:2013-11-06 12:53:37
【问题描述】:

我想使用Iterator interface 循环通过一个名为fileContentArrayList<String>,并且我希望一次分析一个字符串,这将导致switch 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"))'

有人可以帮帮我吗?

【问题讨论】:

  • 如果你这样做"Table".equals(token.toString())怎么办?
  • 我会去调试看看到底是什么令牌

标签: java if-statement arraylist iterator switch-statement


【解决方案1】:

看起来你想把字符串等同起来,试试这个

    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;
    }

}

【讨论】:

  • 几乎没有理由认为token 绝对是一个字符串。
  • OP 试图将 token 等同于“Table”,这个理由还不够吗?
  • 你在这里已经足够长的时间知道它不是
  • 不,你仍然在做一个假设。如果token 是某个自定义类的实例,并且调用equals(String) 只是将其中一个字段的值与传递的参数进行比较怎么办?还是equals(String) 将调用toString() 的结果与传递的参数进行比较?或者 OP 只是在做他们认为应该有效的事情,但考虑到他们正在使用的对象实际上没有任何意义?
  • token 应该被读取为字符串,因为 ArrayList fileContent
【解决方案2】:

是什么让您认为“它正确地将 Object 标记读取为 'Table'”?当if() 失败时,token 必须与Table 不同。我的猜测是输出具有误导性。试试这个:

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

标记周围的方括号将帮助您查看意外的空白字符。

另请注意,token 可能不是字符串,但在调用 toString() 时会返回 Table(如果将其附加到字符串,则会发生这种情况)。

【讨论】:

  • 因为我在插入 if -else 语句之前尝试将其打印出来。
猜你喜欢
  • 1970-01-01
  • 2011-08-22
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多