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

时间:2013-03-30 21:17:05

标签: java nullpointerexception

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();
}
}

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

请向我解释如何将其删除。我使用分割函数和空指针异常搜索了很多,但是我无法理解我做错了什么。

5 个答案:

答案 0 :(得分:5)

如果从in.readLine()返回null:

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

然后循环将退出,inputLine将保持为空。

逻辑上,当循环结束时,inputLine始终为空,因此中的异常不可避免

答案 1 :(得分:5)

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

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

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

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

这是否具有预期的效果?

答案 2 :(得分:3)

你的while循环中缺少括号。当您尝试inputLine时,split()为空。尝试

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

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

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

答案 3 :(得分:2)

当达到String[] strarr = inputLine.split(",");时,您已阅读完整的回复 - 但此时inputLinenull,因此您无法将其拆分。

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

String inputLine;
String allData = "";

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

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

(这段代码效率有点低,但应该有效。)

但是,您的URL指向JSON文档,因此您可能希望使用JSON解析器而不是执行此操作。它比手动解析JSON更可靠,也可能更容易。有关各种语言的JSON和JSON库的信息,请参阅http://json.org

答案 4 :(得分:1)

这是因为inputline上次在While循环中读取时,inputLine中没有读取任何内容。因此,当您尝试whilespli循环inputline后,它会NullPointerExcpetion。{/ p>

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

解决方法是使用StringBuilder,如下所示:

StringBuilder sbuilder = new StringBuilder();
while ((inputLine = in.readLine()) != null) 
            sbuilder.append(inputLine);
String[] strarr = (sbuilder.toString()).split(",");