10 java parsing exception-handling exception numberformatexception
我必须解析一个可以采用十六进制值或其他非十六进制值的字符串
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
}
Run Code Online (Sandbox Code Playgroud)
这段代码可以被视为"丑陋"还是难以阅读?还有其他(可能更优雅)的解决方案吗?
编辑:我想澄清(在我的情况下)错误的输入不存在:我只需要区分它是否是十六进制数.而且为了完整起见,我正在为DCPU-16制作一个简单的装配器.
异常处理是Java编程语言不可或缺的一部分(也是设计目标之一)......你不应该因为你认为它们"丑陋"而抛弃它们.
也就是说,如果您想要一种简单易读的方法来处理NumberFormatExceptions,您可以考虑使用NumberUtils该类.
该toInt(String str, int defaultValue)方法将一String到int,如果转换失败返回默认值.如果字符串是null,则返回默认值.
NumberUtils.toInt(null, 1) = 1
NumberUtils.toInt("", 1) = 1
NumberUtils.toInt("1", 0) = 1
Run Code Online (Sandbox Code Playgroud)
该方法封装了异常捕获和处理,如下面的源代码所示.因此,客户端只需要进行一次方法调用.
public static int toInt(String str, int defaultValue) {
if(str == null) {
return defaultValue;
}
try {
return Integer.parseInt(str);
} catch (NumberFormatException nfe) {
return defaultValue;
}
}
Run Code Online (Sandbox Code Playgroud)