我必须解析一个可以采用十六进制值或其他非十六进制值的字符串
0xff,0x31或A,PC,标签等.
我用这个代码来分割两种情况:
String input = readInput(); try { int hex = Integer.decode(input); // use hex ... } catch (NumberFormatException e) { // input is not a hex,continue parsing }
这个代码可以被认为是“丑”还是难以阅读?还有其他(也许更优雅)的解决方案吗?
编辑:我想澄清(在我的情况下)一个错误的输入不存在:我只需要区分是否是一个十六进制数字,否则.
为了完整,我正在为DCPU-16制作一个简单的assebler.
解决方法
异常处理是Java编程语言的一个组成部分(也是设计目标之一)…你不应该把它们抛弃,只因为你认为它们是“丑陋的”.
也就是说,如果你想要一个简单可读的方式来处理NumberFormatExceptions,你可以考虑使用NumberUtils
类.
toInt(String str,int defaultValue)方法将String转换为int,如果转换失败,则返回默认值.如果字符串为空,则返回默认值.
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; } }