java – 捕获NumberFormatException是不好的做法?

前端之家收集整理的这篇文章主要介绍了java – 捕获NumberFormatException是不好的做法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须解析一个可以采用十六进制值或其他非十六进制值的字符串

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;
    }
}

猜你在找的Java相关文章