Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Double#parseDouble在尝试解析空子字符串/令牌时不引发NullPointerException_Java_Input_Java.util.scanner - Fatal编程技术网

Java Double#parseDouble在尝试解析空子字符串/令牌时不引发NullPointerException

Java Double#parseDouble在尝试解析空子字符串/令牌时不引发NullPointerException,java,input,java.util.scanner,Java,Input,Java.util.scanner,我正在使用try-catch处理一些代码,在执行Double.parseDouble()时,我需要空的子字符串来抛出异常(在本例中,我假设它将是NullPointerException) 我的问题是,如果我输入类似于、(空格逗号-空格逗号-空格逗号)或类似的内容(如果我理解正确,应该将字符串拆分为三个空格),为什么此代码不会引发异常: 扫描仪输入=新扫描仪(System.in); 字符串[]inputParts=null; 字符串inputLine=input.nextLine(); //这里的

我正在使用try-catch处理一些代码,在执行
Double.parseDouble()
时,我需要空的子字符串来抛出异常(在本例中,我假设它将是
NullPointerException

我的问题是,如果我输入类似于
(空格逗号-空格逗号-空格逗号)或类似的内容(如果我理解正确,应该将字符串拆分为三个空格),为什么此代码不会引发异常:

扫描仪输入=新扫描仪(System.in);
字符串[]inputParts=null;
字符串inputLine=input.nextLine();
//这里的matches()阻止了这种情况的发生,但我还是不明白
//为什么不抛出异常
如果((inputLine.contains(“,”)| | inputLine.contains(“)&&!inputLine.matches(\\s+”){
inputParts=inputLine.split(“\\s*(,*\\s+));(,+)”;
}
对于(int i=0;i
如果我尝试从空字符串
解析double
,而不这样接受用户输入,则会引发异常

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


谢谢。

也许它没有进入拆分您正在使用的jdk版本?@kucing_terbang我已经在使用jdk 8 update 77的多台计算机上尝试过这一点。使用
inputLine.split(\\s*(,*\\s+))(,+)”
?是否要使用逗号作为分隔符拆分字符串?
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])); 
}