如何在NumberFormatException.getMessage()中抑制“For input string:”?

时间:2014-07-25 13:50:05

标签: java

代码

try {
    Integer.parseInt("foo");
} catch(NumberFormatException e) {
    System.err.println("Invalid number: " + e.getMessage());
}

打印

Invalid number: For input string: "foo"

我希望只收到"foo",所以我的信息将是

Invalid number: "foo"

我已尝试过可用的API,但它们都在消息中包含"For input string: "。我可以解析它,或扩展NumberFormatException,但这是一个矫枉过正(丑陋)。还有另一种方法可以达到这个目的吗?

5 个答案:

答案 0 :(得分:1)

org.apache.commons.lang3.StringUtils
    .substringAfter(e.getMessage(), "For input string: ")

答案 1 :(得分:1)

由于NumberFormatException没有此信息的字段,因此无法单独获取该号码。

编写自己的帮助方法。在该方法中,捕获异常并抛出自己的异常。这样,您就可以完全控制消息,

答案 2 :(得分:1)

System.err.println("Invalid number: " + e.getMessage().replaceAll("For input string: ", ""));

这仅依赖于标准Java API。

答案 3 :(得分:1)

String s = "foo";
try {
    Integer.parseInt(s);
} catch(NumberFormatException e) {
    //log the e here to your file log or wherever you want
    System.err.println("Invalid number: " + s);
}

在@Arkadiy的更正后更新。

答案 4 :(得分:1)

如果您想要的是更有意义的异常文本,则需要捕获原始异常并自行抛出:

int parseInt(String str) {

    try {
        Integer.parseInt(str);
    } catch(NumberFormatException e) {
        throw new NumberFormatException("Invalid number: " + str);
    }
}

不是我建议这样的事情。