我正在尝试将小时,分钟,秒和毫秒与输入的时间分开。现在我有
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("[\\.:]");