在運行人人爬蟲的爬取用戶檔案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分配內存空間 即有效的內存地址 因此會這樣