我需要检查给定的字符串在Java中是否为有效的JSON。
使用google gson的简单方法是:
public static boolean isValidJson(String str) {
try {
gson.fromJson(str, Object.class);
return true;
} catch(com.google.gson.JsonSyntaxException ex) {
return false;
}
}
我们可以将任何JSON解析器用于相同的逻辑,但是我还没有看到任何用于验证json的内置方法。
另一个经典示例是用于检查数字的自定义函数:
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
我的问题是:以这种方式对逻辑使用异常可以吗?还是不好的做法?
答案 0 :(得分:3)
使用异常的方式很好。 从长远来看,微优化并不会使您受益。
编写代码时,您应该尽量平衡性能与可读性和可维护性。
从性能的角度来看尝试捕获异常所带来的损失并不大。它不能证明编写不可读或无法维护的代码是合理的。
这里有一篇文章正在回顾您所付出的代价到底有多大,您会发现自己的代价确实很小,如果您没有一个特殊的案例来优化,那么您应该顺其自然{{3 }}
这里进行了1亿次迭代,差别只是几毫秒:
00:00:00.4269033 // with try/catch
00:00:00.4260383
答案 1 :(得分:1)
如果可能,请在程序的 normal 流中尽量不要使用异常。 在Java中,异常处理的速度非常慢,因此,如果在程序的常规执行期间抛出并捕获了许多异常,可能会对性能产生严重影响。
当然也有例外。如上所述,除了使用异常来检查有效性外,别无选择。
如果您确实控制代码本身,则异常仅在不常见情况下抛出,也算不错。如果您希望程序非常定期地遇到异常,请尝试寻找其他方法。