代码
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,但这是一个矫枉过正(丑陋)。还有另一种方法可以达到这个目的吗?
答案 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);
}
}
不是我建议这样的事情。