为什么在从Java中的文本文件中读取数据时字符串前面为空?

时间:2016-01-11 13:40:40

标签: java arrays string file null

我正在编写一个程序,要求我从文本文件中读取数据,然后使用该数据创建一个对象,然后将其存储在二维数组中。首先,我将首先向您提供我正在从文本文件中读取的数据样本。

Christian
Huygens
460
ICSE
D
1
J
-3
-4
-5

请注意,实际文本文档中的行之间没有空格。现在,我必须读取这些数据并将其存储在数组Student a[30][100]中。为此,我使用了方法intialize_array(),如下所示。

void initialize_array()throws IOException
{  BufferedReader br_1=new BufferedReader(new FileReader("D1.txt"));
int i=0; //Filling only the first row
for(int j=0;j<100;j++) //Looping through all students in section A
           {   

                    String a=br_1.readLine(); //First name
                    if(a!=null)
                    {
                    String b=br_1.readLine(); //Surname
                    int c=Integer.parseInt(br_1.readLine());//School Number
                    String d=br_1.readLine();//Current Board
                    String e=br_1.readLine();//Form
                    int f=Integer.parseInt(br_1.readLine());//Stream
                    String g=br_1.readLine();//House Name 
                    int h=Integer.parseInt(br_1.readLine());
                    int m=Integer.parseInt(br_1.readLine());
                    int n=Integer.parseInt(br_1.readLine());
                    Student st=new Student(a,b,c,d,e,f,g,h,m,n); //These are all the fields of the Student class 
                    this.a[i][j]=st;
                    String empty=br_1.readLine();

                    }
                }
}

总共有30个部分,一个部分最多可以包含100名学生。此代码仅适用于一个部分,因此,行是预先确定的。对于那个特定的行/部分,我基本上填补了属于该部分的学生。完成此操作后,我使用Student类的display方法显示该部分中的所有学生。这种方法如下:

void display123()throws IOException
    {   initialize_array();

        for(int i=0;i<30;i++)
        for(int j=0;j<100;j++)
        {  if(a[i][j]!=null)
            {   
              a[i][j].display();

        }
    }
}

作为参考,学生班的方法display()如下:

void display()throws IOException
{ 
    System.out.println("Name: "+first_name+" "+surname);
    System.out.println("School Number :"+school_number);
    System.out.println("House :"+house);
    System.out.println("Current Board :"+current_board);
    System.out.println("Form :"+form);
    System.out.println("Stream :"+stream);
    System.out.println("Late Mark(s) :"+late_mark);
    System.out.println("Absent Mark(s) :"+absent_mark);
    System.out.println("Present Mark(s) :"+present_mark);
}

上一个方法display123()的输出让我惊慌失措。所有字符串都显示为前面的空值,如此

Name: nullChristian nullHuygens
School Number :460
House :nullJ
Current Board :nullICSE
Form :nullD
Stream :1
Late Mark(s) :-3
Absent Mark(s) :-4
Present Mark(s) :-5

类Student的构造函数如下:

public Student(String f,String s,int ss,String c, String ff,int sss,String h,int l,int a,int p)
 {  first_name=first_name+f;
   surname=surname+s;
   school_number=ss;
   current_board=current_board+c;
   form=form+ff;
   stream=sss;
   house=house+h;
   late_mark=l;
   absent_mark=a;
   present_mark=p;
    }

1 个答案:

答案 0 :(得分:0)

修剪琴弦只是解决症状,而不是根本原因。

&#34; null&#34;的原因出现在构造函数中:

first_name=first_name+f;

默认情况下,first_name字段将初始化为空值。 sum运算符将它转换为&#34; null&#34;字符串并添加f的给定值。

要正确解决此问题,请删除摘要:

first_name=f;