【问题标题】:NumberFormatException - how to get the result and suppress the exception?NumberFormatException - 如何获取结果并抑制异常?
【发布时间】:2014-07-27 17:59:40
【问题描述】:

我想使用转换的结果。我可以这样做吗?

int num1 = Integer.parseInt(a.getText());

int num2 = Integer.parseInt(b.getText()); 

c.setText(String.valueOf(num1+num2));

【问题讨论】:

  • 我不清楚你想要达到什么目的以及你的问题是什么。
  • 这个问题没有显示出对它所关注的语言(Java)和异常范式本身的最低限度的理解。 OP,首先阅读docs.oracle.com/javase/tutorial/essential/exceptions,而不是在 SO 上打扰人们

标签: java string exception


【解决方案1】:

1。将整个代码包装在 try 块中:

try {
    int num1 = Integer.parseInt(a.getText());

    int num2 = Integer.parseInt(b.getText()); 

    c.setText(String.valueOf(num1 + num2));
} catch(NumberFormatException ex) {
    // Ignore?

    // Handle?
    ex.printStackTrace();
}

2。在方法调用上使用try-catch 块:

int num1;
try {
    num1 = Integer.parseInt(a.getText());
} catch(NumberFormatException ex) {
    // Ignore?

    // Handle?
    a.setText(0);
    num1 = 0;
}

3。 ValidateString解析前:

int num1 = a.getText().matches("-?\\d+") ? Integer.parseInt(a.getText()) : 0 /* Arbitrary Default Value */;

这三个选项中的任何一个都可以工作;具体的选择应该取决于您到底想要达到的目标。

【讨论】:

  • 我不会说“忽略”是一个不错的选择 - 明确抛出异常以允许您处理无效的输入案例。
  • @vaxquis "Ignore" 在这种情况下允许默认为初始化值。
  • 你如何区分初始值和作为字符串参数输入的完全相同的值?没有办法做到这一点。这正是 Java 提供异常的原因,而忽略这是严重的 OOP/按合同设计的滥用;要么在try 范围内初始化int num1,使其不能在外部使用,并将业务逻辑放在try 块中 - 或者提供一个标志来区分常规情况和例外情况...第一个解决方案是 C++/C#/Java-like,第二个解决方案是 C 风格的编程。如果 OP 询问 Java,范式本身就很清楚。
  • 标题提到了抑制异常 因为我把它编辑成了那个 咯咯咯咯。 OP 显然是一个新手,对 OOP、异常和 Java 都没有任何了解。这就是为什么我认为我们应该为他提供符合​​标准的解决方案,而不是拼凑、技巧或变通办法。
  • 我已经查看了 mcMMO 的指导方针,虽然它们中的大多数都是非常合理的,我完全同意其中的大多数,“在 else、else if、catch 和 finally 声明之前换行" 对于 Java 项目来说是很奇怪的;指南的主要原因是要有一致的感觉 - 并且所有常见的 Java 代码,包括库,都使用 brace on同一行 习惯用法 - 使 mcMMO 与它不一致 - 确切的行 } catch (RuntimeException ex) { 是直接取自 Java 库源代码 (JDK src.zip),你很少(如果有的话)在那里找到任何其他类型的样式。
【解决方案2】:

唯一的结果是您已经得到的Exception。它告诉您该函数无法根据您的输入确定结果。例如:Integer.parseInt("a") 将引发NumberFormatException,因为"a" 通常不被识别为数字; Integer.parseInt(" 42") 将引发 NumberFormatException 因为 " 42" 不是完全数字。你当然可以实现类似

public static int parseIntOrFallback(String text, int fallback) {
    try {
        return Integer.parseInt(text);
    } catch (NumberFormatException e) {
        return fallback;
    }
}

或尝试通过例如挽救输入调用trim() 或使用您自己的解析。这三个都非常特定于一个单独的用例,您没有深入解释。

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2019-12-03
    • 2016-05-22
    • 2012-04-22
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    相关资源
    最近更新 更多