加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 17:46:38 所属栏目:Java 来源:网络整理
导读:我必须解析一个可以采用十六进制值或其他非十六进制值的字符串 0xff,0x31或A,PC,标签等. 我用这个代码来分割两种情况: String input = readInput();try { int hex = Integer.decode(input); // use hex ...} catch (NumberFormatException e) { // input is
我必须解析一个可以采用十六进制值或其他非十六进制值的字符串

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读