2013-03-30 40 views
1
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(); 
} 
} 

的错误是: “异常线程 ”main“ 在imdb.url.main显示java.lang.NullPointerException (url.java:25)”的Java斯普利特()函数给空指针异常错误

请向我解释我如何删除它。我使用分裂函数和空指针异常google了很多,但只是不明白我做错了什么。

+0

由'null.split(..)'工作造成的。 – 2013-03-30 21:23:15

+0

实际上,该URL指向一个JSON文档,因此您可能想使用JSON解析器而不是这样做。 – thejh

回答

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

这是否具有预期的效果?

+0

是的,它工作。感谢解释,现在我明白我做错了什么。 – learnerX

1

这是因为当inputline上次读取While循环时,没有任何内容在inputLine中读取。所以当while循环当你试图spli t inputline它给出NullPointerExcpetion

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(","); 
+0

谢谢我会读到StringBuilder,我是新来的java – learnerX

+0

欢迎.. :)。我很高兴你通过这篇文章了解新事物。 –

5

如果空从in.readLine()在回来过:

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

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

从逻辑上讲,inputLine总是为空时结束循环,所以在必然例外!

3

您在while循环中缺少圆括号。导致inputLine为空时尝试split()它。尝试

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

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

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

这工作。谢谢 – learnerX

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

+0

谢谢我试图为某些人提供一个实用程序,JSP根据电影列表抓取imdb评级等。我用这个在线IMDB Api来达到这个目的。现在我将阅读使用JSON解析器 – learnerX