从NumberFormatException获取源字符串

时间:2014-05-12 09:04:46

标签: java exception-handling numberformatexception

是否可以从catch子句中的NumberFormatException获取某种方式的源字符串,例如:。

try {
    Integer.parseInt("test");
} catch (NumberFormatException e) {
    e.sourceString(); \\ to return "test"
}

感谢。 斯蒂芬

3 个答案:

答案 0 :(得分:4)

将其保存在try块之前的变量中。

答案 1 :(得分:2)

TL; DR

没有良好的方式来做你所要求的事情;最好在try块之前保存变量。


答案很长:

创建例外的

Here's the source code

static NumberFormatException forInputString(String s) {
    return new NumberFormatException("For input string: \"" + s + "\"");
}

如您所见,解析字符串未存储在异常中,因为它将错误消息作为构造函数的一部分创建。但是,因为我们总是知道格式,所以我们可以这样写:

try {
  int foo = Integer.parseInt("foo");
} catch (NumberFormatException e) {
  String message = e.getMessage();
  System.out.println(message.substring(19, message.length() - 1));
}

因此,正如@chrylis所说,将值存储在try块之前的变量中,如果存在异常则使用它是最佳解决方案。

有两个理由这样做(这实际上是你在OP中提出要求的唯一方法):

  1. 如果他们更改了消息,您的代码将会中断(@ EvgeniyDorofeev的回答仍然如此)
  2. 这种方式要慢得多,因为它必须解析String

答案 2 :(得分:0)

试试这个

String ss = e.getMessage();
ss = ss.substring(ss.indexOf('"') + 1, ss.length() - 1);