[英]String comparison logic not working as intended
我有一个带有不同时间的文本文件,如下所示:
12:30 am
4:50 PM
6:15 A.M.
8:09 p.m.
等等
我想解析该文件的小时,分钟和子午线。 我尝试使用正则表达式"[: ]"
,但不断向我抛出IOException("Invalid meridian.")
我犯了一个异常。
这是一些代码:
try {
System.out.println("Enter the name of the input file: ");
inputFile = in.nextLine();
System.out.println("Enter the name of the output file: ");
outputFile = in.nextLine();
Scanner fileIn = new Scanner(new File(inputFile));
while (fileIn.hasNext()) {
String[] vals = fileIn.nextLine().split("[: ]");
int hours = Integer.parseInt(vals[0]);
int minutes = Integer.parseInt(vals[1]);
String meridian = vals[2];
times.add(new Time(hours, minutes, meridian));
}
fileIn.close();
System.out.println("Unsorted times: ");
for (Time i: times)
System.out.println(i);
} catch(IOException e) {
e.printStackTrace();
System.exit(90);
}
这是IOException最初被设想的地方(在Time构造函数中):
if (!(meridian.toUpperCase().equals("AM") &&
meridian.toUpperCase().equals("A.M.") &&
meridian.toUpperCase().equals("PM") &&
meridian.toUpperCase().equals("P.M.")))
throw new IOException("Invalid meridian.");
可能是什么问题呢? ◕_◕
您的逻辑不正确。 永远不会同时等于所有四个字符串。 您需要逻辑或||
在括号内:
if (!(meridian.toUpperCase().equals("AM") ||
meridian.toUpperCase().equals("A.M.") ||
meridian.toUpperCase().equals("PM") ||
meridian.toUpperCase().equals("P.M.")))
这样,如果它等于预期的情况之一,则不会引发异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.