0
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 at imdb.url.main(url.java:25)」

削除する方法を教えてください。分割関数とヌルポインター例外の使用についてよくグーグルで検索しましたが、何が間違っているのか理解できません。

4

5 に答える 5

5

inから null が返された場合in.readLine():

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

その後、ループは終了し、inputLinenull のままになります。

論理的には、ループが終了inputLineすると常にnull になるため、例外は避けられません !

于 2013-03-30T21:19:39.757 に答える
5

while ループが終了するinputLineと null になるため、呼び出す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);
}

これは意図した効果がありますか?

于 2013-03-30T21:20:24.760 に答える
3

while ループに括弧がありません。inputLineしようとするとnullになりますsplit()。試す

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

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

    System.out.println("splits.size: " + strarr.length);
}
于 2013-03-30T21:20:30.953 に答える
2

String[] strarr = inputLine.split(",");達すると、応答全体を読んだことになりますがinputLinenullその時点であるため、分割することはできません。

これを修正する方法は、何をしようとしているのかによって異なります。ドキュメント全体を分割したい場合は、すべてのデータを 1 つの大きな文字列にまとめてみてください。

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を参照してください。

于 2013-03-30T21:22:16.603 に答える
1

これは、inputline前回Whileループで読み取ったときに何も読み取られていないためinputLineです。したがって、whileループ後にsplitを実行しようとする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(",");
于 2013-03-30T21:18:33.527 に答える