有这样一个需求:
系统初始化时,读配置文件config,配置文件的内容如下:
[河北]
石家庄 11
保定 12
秦皇岛 13
[四川]
德阳 21
成都 22
绵阳 23
雅安 24
[新疆]
乌鲁木齐 31
……………………………………config中的内容按[**]分小节。随着需要,config中的小节会进行增删,每个小节的记录数也不定,也会随需要进行增删。也就是说,config中后来可能添上[内蒙古],而现有的[四川]下面,可能添加”遂宁 25“这样的记录进去。
现在偶有个需求,就是系统初始化时,读config文件,根据读到的[]生成数量不定的地域名数组province,根据每小节下的记录,生成数量不定的类数组branch,程序如下:类的定义:
public class Branch {
public String Bname;
public String Branno;
public long count;
public double sum;
Branch(){
count=0;sum=0.0;
}
}系统初始化部分代码:
1 InputStreamReader fr = new InputStreamReader(new FileInputStream(System.getProperty("user.dir") + "\\config"));
2 BufferedReader br=new BufferedReader(fr);
3 String province[];Branch array[][];
4 String midarr[],midstr;int i=0,j=0;
5 while((midstr=br.readLine())!=null){
6 midarr=midstr.split(" ");
7 if(midarr[0].charAt(0)=='[')
8 {province[i]=midarr[0].replace("[","");
9 province[i]=province[i].replace("]","");
10 i++;j=0;continue;
11 }
12 array[i][j].Bname=midarr[0].trim();array[i][j].Branno=midarr[1].trim();j++;
13 System.out.println(i+"\t"+j+"\t"+array[i][j]+"\t"+array[i][j]);
}为什么编译时在第8、12行报错:java.lang.NullPointerException该怎么修改呢?
系统初始化时,读配置文件config,配置文件的内容如下:
[河北]
石家庄 11
保定 12
秦皇岛 13
[四川]
德阳 21
成都 22
绵阳 23
雅安 24
[新疆]
乌鲁木齐 31
……………………………………config中的内容按[**]分小节。随着需要,config中的小节会进行增删,每个小节的记录数也不定,也会随需要进行增删。也就是说,config中后来可能添上[内蒙古],而现有的[四川]下面,可能添加”遂宁 25“这样的记录进去。
现在偶有个需求,就是系统初始化时,读config文件,根据读到的[]生成数量不定的地域名数组province,根据每小节下的记录,生成数量不定的类数组branch,程序如下:类的定义:
public class Branch {
public String Bname;
public String Branno;
public long count;
public double sum;
Branch(){
count=0;sum=0.0;
}
}系统初始化部分代码:
1 InputStreamReader fr = new InputStreamReader(new FileInputStream(System.getProperty("user.dir") + "\\config"));
2 BufferedReader br=new BufferedReader(fr);
3 String province[];Branch array[][];
4 String midarr[],midstr;int i=0,j=0;
5 while((midstr=br.readLine())!=null){
6 midarr=midstr.split(" ");
7 if(midarr[0].charAt(0)=='[')
8 {province[i]=midarr[0].replace("[","");
9 province[i]=province[i].replace("]","");
10 i++;j=0;continue;
11 }
12 array[i][j].Bname=midarr[0].trim();array[i][j].Branno=midarr[1].trim();j++;
13 System.out.println(i+"\t"+j+"\t"+array[i][j]+"\t"+array[i][j]);
}为什么编译时在第8、12行报错:java.lang.NullPointerException该怎么修改呢?
InputStreamReader fr = new InputStreamReader(new FileInputStream(System.getProperty("user.dir") + "\\config"));
2 BufferedReader br=new BufferedReader(fr);
3 String province[];Branch array[][];
4 String midarr[],midstr;int i=0,j=0;
5 while((midstr=br.readLine())!=null){
6 midarr=midstr.split(" ");
7 if(midarr[0].charAt(0)=='[') //midarr没有初始化,即midarr=new String[xx]
8 {province[i]=midarr[0].replace("[",""); //province没有初始化,即province=new String[xx]
9 province[i]=province[i].replace("]","");
10 i++;j=0;continue;
11 }
12 array[i][j].Bname=midarr[0].trim();array[i][j].Branno=midarr[1].trim();j++; //array没有初始化
13 System.out.println(i+"\t"+j+"\t"+array[i][j]+"\t"+array[i][j]);
}
LZ用Map<String, List<String>>可能会更好一些,因为一开始并不知道数组的长度
这一行可以不初始化,能够通过,偶曾经也在其他地方用过。但province和array 数组却不能这么用呢
用Map和集合最简单了,因为你不知道你的数组的长度,当然,你每次重新new一个数组增加长度也可以
大概看了一下你的程序,你的循环也有问题,计算你的数组都new了,你的i++先被执行了,最后的array[0][x]是没有值得
在你的基础上用集合帮你改了一下,还有,你这样解析文件,你要严格保证你的文件格式,否则也会出错InputStreamReader fr = new InputStreamReader(new FileInputStream(System.getProperty("user.dir") + "\\config"));
2 BufferedReader br=new BufferedReader(fr);
3 List<String> province=new ArrayList<String>();List<Branch> branch = new ArrayList<Branch>();
4 String midarr[],midstr;int i=0,j=0;
5 while((midstr=br.readLine())!=null){
6 midarr=midstr.split(" ");
7 if(midarr[0].charAt(0)=='[')
8 {String tmp=midarr[0].replace("[","");
9 temp=tmp.replace("]","");
10 i++;j=0;continue;
11 }
12 Branch b = new Branch();b.Bname=midarr[0].trim();b.Branno=midarr[1].trim();
13 System.out.println(i+"\t"+j+"\t"+b.Bname+"\t"+b.Branno); branch.add(b);
}