字符串比较逻辑未按预期工作

时间:2013-12-02 23:40:03

标签: java regex

我有一个不同时间的文本文件,如下所示:

 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.");

可能是什么问题? (つ◕_◕)つ

1 个答案:

答案 0 :(得分:6)

你的逻辑错误。它永远不会同时等于所有4个字符串。你想要括号内的逻辑OR ||

if (!(meridian.toUpperCase().equals("AM")   ||
      meridian.toUpperCase().equals("A.M.") ||
      meridian.toUpperCase().equals("PM")   ||
      meridian.toUpperCase().equals("P.M.")))

如果它等于一个预期的情况,那么就不会抛出异常。