java报错thread "main" java.lang.NullPointerException

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class exercise {

/**
 * @param args
 */
public static void main(String[] args)throws Exception{
    // TODO 自动生成的方法存根 
    String[] s=new String[2000000];
    int index1=0;
    int index2=0;
    String str1=null;
    String str2=null;
    String[][] SaveName=new String[100000][2];

    Scanner input=new Scanner(new File("C:/Users/何大帅/Desktop/harry potter1.txt"));


    while(input.hasNext()){
    String token=input.next();
   // token=String.format(token);
    s[index1]=token;
 //  System.out.println(token);
    index1++;
    }

      for(int i=0;i<index1;i++){
        System.out.print(s[i]+"\n");
     }
       System.out.print(index1);


       for(int j=0;j<s.length;j++){
           for(int k=1;k<10;k++){
           str1=s[j];
          // System.out.print(s[j]);
           str2=s[j+k];
          // System.out.print(s[j+k]);
           if(str1.length()==0||str2.length()==0){
               break;
           }
           if(str1.charAt(0)>='A'&&str1.charAt(0)<='Z'&&str2.charAt(0)>='A'&&str2.charAt(0)<='Z'){
               SaveName[index2][0]=str1;
               SaveName[index2][1]=str2;
               index2++;
           }
           }
       }
       System.out.print(index2);
       for(int m=0;m<index2;m++){
           System.out.print(SaveName[m][0]+SaveName[m][1]+"\n");
       }

}

程序是把一个文本输入然后分割成单个单词也就是单个字符串存进一个字符串数组s里。然后把其中相邻十个以内的大写字母开头的单词存进二维数组SaveName里。

}

空指针异常,检查下报错的代码所在行,看看哪些对象操作可能由空对象。