2013-03-30 63 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