Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在Switch语句中使用迭代器_Java_If Statement_Arraylist_Iterator_Switch Statement - Fatal编程技术网

Java:在Switch语句中使用迭代器

Java:在Switch语句中使用迭代器,java,if-statement,arraylist,iterator,switch-statement,Java,If Statement,Arraylist,Iterator,Switch Statement,我想使用迭代器接口,在名为fileContent的ArrayList中循环,我想一次分析一个字符串,根据它是什么字符串,switch语句会导致特定的状态。 对象标记应被读取为“表” void process() { Iterator fileIterator = fileContent.iterator(); int state = 0; Object token = null; switch (state) {

我想使用
迭代器接口
,在名为
fileContent
ArrayList
中循环,我想一次分析一个字符串,根据它是什么字符串,
switch语句
会导致特定的状态。
对象标记应被读取为“表”

        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'
因此,它似乎正确地将对象标记读取为“Table”,而不是语句
“if(token.equals(“Table”)”
。 我还尝试了
'if(token==(“Table”)”


有人能帮我吗?

看起来你想让字符串相等,试试这个

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

}
是什么让您认为“它将对象标记正确地读取为‘表’”?当
if()
失败时,则
标记必须与
不同。我的猜测是,这一结果具有误导性。请尝试以下方法:

System.err.println("Corrupt file format at state 0: ["+ token + "]");
标记周围的方括号将帮助您看到意外的空白字符


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

如果执行
“Table.equals”(token.toString())该怎么办
?我会进入调试阶段,看看令牌到底是什么。几乎没有理由认为
令牌
肯定是一个字符串,尽管.OP试图将令牌等同于“表”,但这还不够吗?你已经在这里待了足够长的时间,知道它不是。不,你仍然在做一个假设。如果
token
是某个自定义类的实例,调用
equals(String)
只是将其一个字段的值与传递的参数进行比较,该怎么办?或者
equals(String)
将调用
toString()的结果与传递的参数进行比较?或者OP只是在做一些他们认为应该有效的事情,但考虑到他们正在处理的对象,实际上没有任何意义?令牌应该作为字符串读取,因为ArrayList FileContents,因为我在插入if-else语句之前尝试将其打印出来。