繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM