【问题标题】:How to use second and third value of split if first value is not present?如果第一个值不存在,如何使用拆分的第二个和第三个值?
【发布时间】:2021-04-28 01:49:37
【问题描述】:

我正在尝试创建一个 java 类,以从 HH:mm:ss 持续时间中获取秒数以用于某些数学运算,并且它可以工作。唯一的问题是,如果用户只有分钟和秒,他们不会考虑输入例如 0:3:42,而是会输入 3:42。

代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int seconds = 0;

        System.out.println("Enter time in HH:mm:ss to convert into seconds:");
        String standardTime = scan.nextLine();
        scan.close();

        String[] split = standardTime.split(":"); {
            seconds += Integer.parseInt(split[0]) * 3600;
            seconds += Integer.parseInt(split[1]) * 60;
            seconds += Integer.parseInt(split[2]);
        }
        System.out.println(seconds);
    }
}

如果格式是 mm:ss 而不是 HH:mm:ss,我希望能够使用 [1] 和 [2] 而不是 [0] 和 [1]。

【问题讨论】:

  • 可以根据标准时间长度进行拆分
  • 指令状态Enter time in HH:mm:ss...如果输入不是那个格式会不会出错?
  • 我建议不要这样做。保持简单,如果他们搞砸了,就会抛出一个带有解释性消息的输入异常。换句话说,如果他们没有想到,就向他们解释。
  • @AndrewS 这不是错误,但是如果时间没有小时并且用户不知道在开头输入 0: 会计算错误,因为这很奇怪并且会造成不便为用户。
  • @WJS 我宁愿为用户提供简单的体验,也不愿为我自己提供简单的体验。

标签: java arrays split


【解决方案1】:

如果输入是 mm:ss,并且您使用“:”作为分隔符调用 split,它实际上会创建一个包含两个值的数组 - 'mm' 和 'ss'。

因此,要从该数组中读取,您应该使用索引 0 和 1。无法从具有两个值的数组中获取索引 2(不获取 ArrayIndexOutOfBoundsException)。

相反,您可以在创建后检查该数组的大小。如果是 2,那么你知道你只有分钟和秒,然后做你想做的计算。

【讨论】:

    【解决方案2】:

    您可以从数组末尾而不是数组开头引用索引,如果数组太小,则假定值为0

    seconds += split.length == 3 ? Integer.parseInt(split[0])*3600 : 0;
    seconds += Integer.parseInt(split[split.length - 2])*60;
    seconds += Integer.parseInt(split[split.length - 1]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 2015-07-11
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      相关资源
      最近更新 更多