我有一个不同时间的文本文件,如下所示:
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.");
可能是什么问题? (つ◕_◕)つ
答案 0 :(得分:6)
你的逻辑错误。它永远不会同时等于所有4个字符串。你想要括号内的逻辑OR ||
:
if (!(meridian.toUpperCase().equals("AM") ||
meridian.toUpperCase().equals("A.M.") ||
meridian.toUpperCase().equals("PM") ||
meridian.toUpperCase().equals("P.M.")))
如果它等于一个预期的情况,那么就不会抛出异常。