java - 捕获 NumberFormatException 是一种不好的做法吗?

标签 java parsing exception exception-handling numberformatexception

我必须解析一个可以采用十六进制值或其他非十六进制值的字符串

0xff0x31APClabel 等上。

我用这段代码来划分这两种情况:

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/

相关文章:

json - 解析 Json 对象中的 Json 对象 Swift 5

java - 异常处理

java - 在Java中,如何在没有正则表达式的情况下查找字符串中的第一个字符是否为大写

javascript - 如何使用 javascript find 方法解析 xml?

java - JSF 应用程序中的自动注销

java - 停止/中断操作

android - 不幸的是,MyApp 已停止 - logcat 中没有错误日志

android - Android ViewDragHelper 中的 ArrayIndexOutOfBoundsException

java - 为什么不添加 AWTEventListener?

java - 如何在 eclipse 4.2 中贡献一个新 View ?