我必须解析一个可以采用十六进制值或其他非十六进制值的字符串
0xff
、0x31
或 A
、PC
、label
等上。
我用这段代码来划分这两种情况:
String input = readInput();
try {
int hex = Integer.decode(input);
// use hex ...
} catch (NumberFormatException e) {
// input is not a hex, continue parsing
}
这段代码可以被认为“丑陋”或难以阅读吗?还有其他(也许更优雅)的解决方案吗?
编辑:我想澄清的是(在我的例子中)不存在错误的输入:我只需要区分它是否是十六进制数。 为了完整起见,我正在为 DCPU-16 制作一个简单的组装器。 .
最佳答案
异常处理是 Java 编程语言不可或缺的一部分(也是设计目标之一)...您不应该仅仅因为认为它们“丑陋”就将其抛弃。
也就是说,如果您想要一种简单易读的方式来处理 NumberFormatException
,您可以考虑使用 NumberUtils
类代替。
toInt(String str, int defaultValue)
方法将 String
转换为 int
,如果转换失败则返回默认值。如果字符串为 null
,则返回默认值。
NumberUtils.toInt(null, 1) = 1
NumberUtils.toInt("", 1) = 1
NumberUtils.toInt("1", 0) = 1
该方法封装了异常捕获和处理,如 source code 中所示以下。因此,客户端只需进行一次方法调用。
public static int toInt(String str, int defaultValue) {
if(str == null) {
return defaultValue;
}
try {
return Integer.parseInt(str);
} catch (NumberFormatException nfe) {
return defaultValue;
}
}
关于java - 捕获 NumberFormatException 是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162671/