java数组报错空指针 java.lang.NullPointerException

在运行人人爬虫的爬取用户档案StartUserCrawl类时,忽然报出了java.lang.NullPointerException错误java

具体的报错行在 UserCrawler.getUserProfile(String, String)的if(temp[schoolNameIndex+1].matches("\\d+?级")){数组

if(temp[j].matches(schoolName)){
	System.out.println("√在此用户教育经历内找到当前查找学校-"+schoolName);
	schoolNameIndex = j;
        if(temp[schoolNameIndex+1].matches("\\d+?级")){
             int convertYear = Integer.parseInt(temp[schoolNameIndex+1].substring(0,4));
        ....

temp[]是String[30]的数组,已经实例化。指针

因而print整个temp数组发现,只有7个元素,也就是说后面的30-7=23个元素都为null,没有被赋值过:code

0 哈尔滨工业大学
1 2008级
2 市政学院
3 哈师大
4 2004级
5 生命与环境科学学院
6 哈尔滨工业大学对象

而在报错行,当时的 j,也就是后面赋值的 schoolNameIndex,已是6了,也就是指向最后一个已赋值元素 6 哈尔滨工业大学内存

因此此时的temp[schoolNameIndex+1]便指向的是未被赋值过的null了get

将代码改成下面的,完美解决问题,再也不报错:string

if(temp[j].matches(schoolName)){
	System.out.println("√在此用户教育经历内找到当前查找学校-"+schoolName);
	schoolNameIndex = j;
	//解决java.lang.NullPointerException问题,判断此数组元素是否为空
	if((schoolNameIndex+1<temp.length)&&(temp[schoolNameIndex+1]!=null)){
		//判断数组内其下一个条目存储的是否为入学年
		if(temp[schoolNameIndex+1].matches("\\d+?级")){
			
			int convertYear = Integer.parseInt(temp[schoolNameIndex+1].substring(0,4));

由此,通过查阅资料,形成空指针异常的缘由有:io

·当一个对象的值为空时,你没有判断为空的状况。
你能够试着把下面的代码前加一行代码:
if(rb!=null && rb!="")
改为:
if(rb==null);
if(rb!==null&&rb!="")
……class

由于你定义的时候 定义的是null; 因此查的时候若是也是null 那么内存没有为你定义这个List分配内存空间 即有效的内存地址 因此会这样

相关文章
相关标签/搜索