新人问题:StringBuilder sb = new StringBuilder()添加出现异常什么原因
//练习需求是将学生信息写入到文本1.放在for循环里输出正常
for (Student student : students) {
StringBuilder sb = new StringBuilder();
sb.append(student.getName()+",").append(student.getChinese()+",").append(student.getMath()+",").append(student.getEnglish()+",").append(student.getSum());
bwriter.write(sb.toString());
bwriter.newLine();
bwriter.flush();
}
输出到文本:b,44,55,66,165
a,11,22,33,66
2.不放在循环里输出异常
StringBuilder sb = new StringBuilder();
for (Student student : students) {
sb.append(student.getName()+",").append(student.getChinese()+",").append(student.getMath()+",").append(student.getEnglish()+",").append(student.getSum());
bwriter.write(sb.toString());
bwriter.newLine();
bwriter.flush();
}
输出到文本:a,11,22,33,
a,11,22,33,66b,44,55,66,165
为什么要加进循坏里面?还有为什么添加那么多的apprend方法?
你放在循环里的时候,StringBuilder 对象每次在输出完一个学生的成绩信息后,你new了StringBuilder 对象,会被初始化,所以你能正常输出每个学生的成绩;但你异常的那段代码,你输出完一个学生成绩后,StringBuilder 对象还保留了上一个学生的成绩,所以输出来的值包含了多个学生。解决办法是每次在往StringBuilder 对象里添加信息前,先初始化一下。 贴个异常信息出来?
sb.clear().append(student.getName()+",") sb.setLength(0).经常用到。放在for循环里跟用string没大的区别了。 方法1 :放循环里,每次循环的时候会new一个新的stringbuffer 对象,在新的对象里append,然后输出文本
方法2: 放到循坏外,只new 了一次stringbuffer,循环里对一个stringbuffer进行操作 append()方法就是在StringBuild对象后面添加字符串,其连接作用,这是一种方法,不能省。如果要多次使用,可以创造一个方法类,再次使用时调用就行。当然,像你这种使用for循环也可以只写一次就能重复使用。 sb.delete(0, sb.length());
也可以重置 将builder拿出来后把writer也拿出来,不然的话会第一次循环会输出1第二次输出的会将第一次的1拼接为1+1+2
页:
[1]