Java Split()函数给出空指针异常错误
错误是: 线程“main”java.lang.NullPointerException中的“异常” 位于imdb.url.main(url.java:25)”Java Split()函数给出空指针异常错误,java,nullpointerexception,Java,Nullpointerexception,错误是: 线程“main”java.lang.NullPointerException中的“异常” 位于imdb.url.main(url.java:25)” 请向我解释一下如何移除它。我在谷歌上搜索了很多关于使用split函数和null指针异常的信息,但是我不明白我做错了什么 这是因为当inputline上次在中读取时,循环在inputline中没有读取任何内容。因此,在while循环之后,当您尝试splitinputline时,它会给出nullpointerexecption public
请向我解释一下如何移除它。我在谷歌上搜索了很多关于使用split函数和null指针异常的信息,但是我不明白我做错了什么 这是因为当
inputline
上次在中读取时,
循环在inputline
中没有读取任何内容。因此,在while
循环之后,当您尝试spli
tinputline
时,它会给出nullpointerexecption
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();
}
}
解决方法是使用StringBuilder,如下所示:
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
System.out.println(inputLine);//InputLine is null here.
String[] strarr = inputLine.split(",");//throwing NPE
如果从中的
in.readLine()
in返回空值:
StringBuilder sbuilder = new StringBuilder();
while ((inputLine = in.readLine()) != null)
sbuilder.append(inputLine);
String[] strarr = (sbuilder.toString()).split(",");
然后循环将退出,inputLine
将保持为空
从逻辑上讲,
inputLine
在循环结束时将始终为空,因此异常不可避免 当while循环退出时,inputLine
为null,因此调用inputLine.split()
将始终产生NullPointerException
。我相信您要做的是将System.out.println()调用和介于两者之间的所有调用放在大括号中,以便它们都包含在循环迭代中:
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
这是否达到预期效果?while循环中缺少括号。尝试拆分()时导致inputLine
为空。试一试
while ((inputLine = in.readLine()) != null)
{
System.out.println(inputLine);
String[] strarr = inputLine.split(",");
System.out.println("splits.size: " + strarr.length);
}
当String[]strarr=inputLine.split(“,”)时到达code>时,您已经读取了整个响应–但此时inputLine
为null
,因此无法拆分它
如何解决这个问题取决于您正在尝试做什么。如果要拆分整个文档,请尝试在一个大字符串中收集所有数据:
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
String[] strarr = inputLine.split(",");
System.out.println("splits.size: " + strarr.length);
}
(这段代码效率有点低,但应该可以工作。)
但是,您的URL指向一个JSON文档,因此您可能希望使用JSON解析器而不是这样做。这将比手动解析JSON更可靠,也可能更容易。有关各种语言的JSON和JSON库的信息,请参阅。错误是由null.split(..)
导致的。实际上,该URL指向JSON文档,因此您可能希望使用JSON解析器而不是这样做。是的,它起了作用。多亏了这个解释,现在我明白我做错了什么。多亏了,我正在尝试向一些人提供一个实用程序,JSP根据电影列表获取imdb评级等。为此,我使用了这个在线IMDB Api。现在,我将详细了解如何使用JSON语法分析器。我很高兴你通过这篇文章了解了新事物。
String inputLine;
String allData = "";
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
allData += inputLine+"\n";
}
String[] strarr = allData.split(",");