【发布时间】:2019-11-07 13:19:24
【问题描述】:
我收到了一个特定格式的 txt。 格式应该以 dd/MM/uuuu 开头。 但是我想检查它是否确实是这种特定格式,否则我的代码会中断。
现在我的想法是检查特定的前 10 个字符(带有分隔符)是否可以定义 LocalDate 对象。所以我想出了这个:
public boolean isDate(String date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
LocalDate ld = null;
try {
ld = LocalDate.parse(date, formatter);
System.out.println(ld);
} catch (DateTimeParseException e) {
System.out.println("Date " + date + " is not a date.");
return false;
}
return true;
}
但是,这不是最佳实践,因为我正在控制程序流,但有例外。另外我必须检查另外 8 个字段来表示时间等。所以我的代码将充满尝试捕获。有没有更有效的方法来解决这个问题?
【问题讨论】:
-
我不认为在这个例子中这是不好的做法。至少我个人从未听说过 try/catch 块会恶化程序流程。整个测试方法基于将字符串解析为不同数据类型并捕获字符串无法转换的潜在异常的想法。请问您是如何得出在这种情况下捕获异常不是好习惯的结论的?
-
我认为没有其他选择,除非您使用限制较少的检查,例如正则表达式。
-
当我只看了这个问题的标题,在点击它查看实际问题之前,我脑海中弹出的解决方案就像你已经做过的一样。
-
意见总是有效的,我没有多少经验!第 57 条?你说的这个项目是什么?我觉得你在这个问题上想得太远了。这就是在 java 中进行数据类型测试的方式,这是最有效的方式,它读取干净并且不会影响性能,您还想要什么?正如@Kayaman 所说,如果有一个原生的
isDate(String string)方法,这将是它的代码的样子。 -
@Kostas Thanasis - 你没有在这里抛出异常,你正在捕获解析方法抛出的异常。所以你没有违反第 57 条。如果你抛出一个新的异常或重新抛出一个异常,你被捕获了,那么你就违反了上述原则
标签: java validation date-parsing