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)“
请向我解释如何将其删除。我使用分割函数和空指针异常搜索了很多,但是我无法理解我做错了什么。
答案 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(",");
时,您已阅读完整的回复 - 但此时inputLine
为null
,因此您无法将其拆分。
如何解决这个问题取决于你想要做什么。如果要拆分整个文档,请尝试在一个大字符串中收集所有数据:
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
中没有读取任何内容。因此,当您尝试while
时spli
循环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(",");