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语句之前尝试将其打印出来。