Newriver 发表于 2021-11-18 11:44

新人问题: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方法?

火羽夏风 发表于 2021-11-18 13:24

你放在循环里的时候,StringBuilder 对象每次在输出完一个学生的成绩信息后,你new了StringBuilder 对象,会被初始化,所以你能正常输出每个学生的成绩;但你异常的那段代码,你输出完一个学生成绩后,StringBuilder 对象还保留了上一个学生的成绩,所以输出来的值包含了多个学生。解决办法是每次在往StringBuilder 对象里添加信息前,先初始化一下。

Vvvvvoid 发表于 2021-11-18 12:55

贴个异常信息出来?

goldli 发表于 2021-11-18 13:01

sb.clear().append(student.getName()+",")

18537630210 发表于 2021-11-18 14:19

sb.setLength(0).经常用到。放在for循环里跟用string没大的区别了。

he183137 发表于 2021-11-19 09:41

方法1 :放循环里,每次循环的时候会new一个新的stringbuffer 对象,在新的对象里append,然后输出文本
方法2: 放到循坏外,只new 了一次stringbuffer,循环里对一个stringbuffer进行操作

hanbo250 发表于 2021-11-19 10:51

append()方法就是在StringBuild对象后面添加字符串,其连接作用,这是一种方法,不能省。如果要多次使用,可以创造一个方法类,再次使用时调用就行。当然,像你这种使用for循环也可以只写一次就能重复使用。

HiAmo 发表于 2021-11-24 10:37

sb.delete(0, sb.length());
也可以重置

黑猫的猫 发表于 2021-11-27 22:00

将builder拿出来后把writer也拿出来,不然的话会第一次循环会输出1第二次输出的会将第一次的1拼接为1+1+2
页: [1]
查看完整版本: 新人问题:StringBuilder sb = new StringBuilder()添加出现异常什么原因