我正在尝试将小时,分钟,秒和毫秒与输入的时间分开。现在我有

public MillisTime(String str)
throws IllegalArgumentException {
    // Initialize values so that missing fields default to 0.
    int hours = 0, minutes = 0, seconds = 0, millis = 0;

    // Use Scanner class to parse the time string.
    // Catch InputMismatchException and rethrow IllegalArgumentException.
    Scanner scn = new Scanner(str);

    scn.useDelimiter(":");
    try {
        if (scn.hasNext()) hours = scn.nextInt();
        if (scn.hasNext()) minutes = scn.nextInt();
        if (scn.hasNext()) seconds = scn.nextInt();

        scn.useDelimiter(".");
        if (scn.hasNext()) millis = scn.nextInt();
    }
    catch (InputMismatchException ex) {
        throw new IllegalArgumentException(
                                           "String Input Mismatch Exception: " + str);
    }
    scn.close();
    this.setAllFields(hours, minutes, seconds, millis);
}


它正在接收的输入为"16:5:7.009",结果为String Input Mismatch Exception。如果我删除查找周期和毫秒数的行,并输入类似3:45的内容,那么它将起作用。如何使这项工作找到:.

最佳答案

发生异常是因为分隔符为“:”,子组件为{16, 5, 7.009}。 7.009不是整数,因此当您第三次调用scanner.nextInt()时,将获得异常。

请记住,定界符扫描程序使用的可以是regEx模式,因此定界符可能同时为. OR :

scanner.useDelimiter(Pattern.compile("[\\.:]");

10-07 16:15