Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 Split()函数给出空指针异常错误_Java_Nullpointerexception - Fatal编程技术网

Java Split()函数给出空指针异常错误

Java Split()函数给出空指针异常错误,java,nullpointerexception,Java,Nullpointerexception,错误是: 线程“main”java.lang.NullPointerException中的“异常” 位于imdb.url.main(url.java:25)” 请向我解释一下如何移除它。我在谷歌上搜索了很多关于使用split函数和null指针异常的信息,但是我不明白我做错了什么 这是因为当inputline上次在中读取时,循环在inputline中没有读取任何内容。因此,在while循环之后,当您尝试splitinputline时,它会给出nullpointerexecption public

错误是: 线程“main”java.lang.NullPointerException中的“异常” 位于imdb.url.main(url.java:25)”


请向我解释一下如何移除它。我在谷歌上搜索了很多关于使用split函数和null指针异常的信息,但是我不明白我做错了什么

这是因为当
inputline
上次在
中读取时,
循环在
inputline
中没有读取任何内容。因此,在
while
循环之后,当您尝试
spli
t
inputline
时,它会给出
nullpointerexecption

public class url {


 public static void main(String[] args) throws Exception {

    URL imdb = new URL("http://www.omdbapi.com/?t=The%20incredible%20Hulk");

    URLConnection yc = imdb.openConnection();

    BufferedReader in = new BufferedReader(new InputStreamReader(
                                yc.getInputStream()));
    String inputLine;

    while ((inputLine = in.readLine()) != null) 
        System.out.println(inputLine);

    String[] strarr = inputLine.split(",");


    System.out.println("splits.size: " + strarr.length);

    in.close();
}
}
解决方法是使用StringBuilder,如下所示:

while ((inputLine = in.readLine()) != null) 
        System.out.println(inputLine);
System.out.println(inputLine);//InputLine is null here.
String[] strarr = inputLine.split(",");//throwing NPE

如果从中的
in.readLine()
in返回空值:

StringBuilder sbuilder = new StringBuilder();
while ((inputLine = in.readLine()) != null) 
            sbuilder.append(inputLine);
String[] strarr = (sbuilder.toString()).split(",");
然后循环将退出,
inputLine
将保持为空


从逻辑上讲,
inputLine
在循环结束时将始终为空,因此异常不可避免

当while循环退出时,
inputLine
为null,因此调用
inputLine.split()
将始终产生
NullPointerException
。我相信您要做的是将
System.out.println()调用和介于两者之间的所有调用放在大括号中,以便它们都包含在循环迭代中:

 while ((inputLine = in.readLine()) != null) 
    System.out.println(inputLine);

这是否达到预期效果?

while循环中缺少括号。尝试拆分()时导致
inputLine
为空。试一试

 while ((inputLine = in.readLine()) != null)
 {
    System.out.println(inputLine);

    String[] strarr = inputLine.split(",");

    System.out.println("splits.size: " + strarr.length);
}

String[]strarr=inputLine.split(“,”)时时,您已经读取了整个响应–但此时
inputLine
null
,因此无法拆分它

如何解决这个问题取决于您正在尝试做什么。如果要拆分整个文档,请尝试在一个大字符串中收集所有数据:

 while ((inputLine = in.readLine()) != null) {
    System.out.println(inputLine);

    String[] strarr = inputLine.split(",");

    System.out.println("splits.size: " + strarr.length);
}
(这段代码效率有点低,但应该可以工作。)


但是,您的URL指向一个JSON文档,因此您可能希望使用JSON解析器而不是这样做。这将比手动解析JSON更可靠,也可能更容易。有关各种语言的JSON和JSON库的信息,请参阅。

错误是由
null.split(..)
导致的。实际上,该URL指向JSON文档,因此您可能希望使用JSON解析器而不是这样做。是的,它起了作用。多亏了这个解释,现在我明白我做错了什么。多亏了,我正在尝试向一些人提供一个实用程序,JSP根据电影列表获取imdb评级等。为此,我使用了这个在线IMDB Api。现在,我将详细了解如何使用JSON语法分析器。我很高兴你通过这篇文章了解了新事物。
String inputLine;
String allData = "";

while ((inputLine = in.readLine()) != null) {
    System.out.println(inputLine);
    allData += inputLine+"\n";
}

String[] strarr = allData.split(",");