Double#parseDouble在尝试解析空子串/令牌时不抛出NullPointerException

时间:2016-04-06 02:52:42

标签: java input java.util.scanner

我正在使用try-catch处理一些代码,我需要空子串在执行Double.parseDouble()时抛出异常(在这种情况下,我认为它是NullPointerException)。

我的问题是,如果输入类似, , ,(space-comma-space-comma-space-comma)或类似内容(应将字符串拆分为三个),此代码不会抛出异常的原因空格,如果我理解正确的话:

Scanner input = new Scanner(System.in);
String[] inputParts = null;
String inputLine = input.nextLine();

// the matches() here prevents this from happening, but I still don't understand
// why an exception isn't thrown
if ((inputLine.contains(",") || inputLine.contains(" ")) && !inputLine.matches("\\s+")) { 
    inputParts = inputLine.split("\\s*(,*\\s+)|(,+)");
}

for (int i = 0; i < inputParts.length; ++i) {
    // this prints nothing -- not even a new line. Same behavior even if I don't parseDouble
    // and just print the string directly
    System.out.println(Double.parseDouble(inputParts[i])); 
}

如果我从空字符串parseDouble""尝试" "而没有像这样接受用户输入,则会引发异常。

我很困惑为什么会发生这种情况,考虑到我正在处理的代码确实有效,除非我输入类似上面的内容(虽然我通过检查每个子字符串是否只有空格来修复它手动抛出适当的异常。)

感谢。

0 个答案:

没有答案