我想要发生的是从中读取文件并将文本存储在名为data []的String数组中。数据[3]应包含"警告灯为红色"或"警告灯为绿色"如果它已损坏并且不包含我定义了一个我想要抛出的自定义异常。我的代码如下:
if(data[3].equals("Warning Lights are red")){
//do something
}
else if(data[3].equals("Warning Lights are green")){
//do something
}
else if(!data[3].equals("Warning Lights are red") && !data[3].equals("Warning Lights are green")){
throw new FileCorruptionException("Unfortunately the status file was corrupted, please try printing to the file again to fix this issue.");
}
我遇到的问题是,即使数据[3]确实等于&#34,也总是抛出FileCorruptionException;警告灯是红色的"或"警告灯为绿色",我已检入文本文件以确认此情况。我怀疑我有一个逻辑错误,但我不知道它可能是什么。任何建议都表示赞赏。
答案 0 :(得分:2)
这很可能是一个词汇问题。条件中的空格和data[3]
中的空格可能存在差异。检查data[3]
字符串中红色/绿色后的其他空格。希望这会有所帮助。
修改:如果您没有其他案例需要考虑,也可以使用else
代替else if
来抛出异常。
答案 1 :(得分:2)
您可能有一些空格,比如字符串末尾的新行。试试这个来检查是否有空格:
System.out.print(":" + data[3] + ":")
您可以使用String.trim
删除前导空格和尾随空格:
if (data[3].trim().equals() ...
答案 2 :(得分:1)
尝试使用String.equalsIgnoreCase()
代替String.equals()
。可能存在一些案例问题。
没有必要在最后else if
进行检查,因为您已经在前两个条件中检查了它。
if(data[3].equalsIgnoreCase("Warning Lights are red")){
//do something
}
else if(data[3].equalsIgnoreCase("Warning Lights are green")){
//do something
}
else{
throw new FileCorruptionException("Unfortunately the status file was corrupted, please try printing to the file again to fix this issue.");
}