Java:存储和序列化数组中的项
我知道这可能是一个非常简单的问题,但我无法让我的代码正常工作。我需要在一个字段中写入一个XML文件,例如:1-a,2-C,3-D,…25-a 为此,我有项目总数(1..25)以及我从另一个类检索到的这些项目的答案。 下面是我用来编写这种XML的内容,以及我不应该使用的内容Java:存储和序列化数组中的项,java,serialization,for-loop,Java,Serialization,For Loop,我知道这可能是一个非常简单的问题,但我无法让我的代码正常工作。我需要在一个字段中写入一个XML文件,例如:1-a,2-C,3-D,…25-a 为此,我有项目总数(1..25)以及我从另一个类检索到的这些项目的答案。 下面是我用来编写这种XML的内容,以及我不应该使用的内容 for (int i=0;i<=30;i++){ nRespuesta = i+1; nRespuestaString = Integer.toStrin
for (int i=0;i<=30;i++){
nRespuesta = i+1;
nRespuestaString = Integer.toString(nRespuesta);
Respuesta = Verbal.getRespuestas(i);
RespuestaString = nRespuestaString+"-"+Respuesta+",";
}
serializer.startTag(null, "RESPUESTAS");
serializer.text("RespuestaString");
serializer.endTag(null, "RESPUESTAS");
for(int i=0;i更新
Answer现在使用StringBuilder以获得更好的性能
在每次循环迭代中,您需要修改字符串,而不是覆盖,因此请将代码修改为以下内容:
StringBuilder sb = new StringBuilder();
for (int i=0;i<=30;i++){
nRespuesta = i+1;
nRespuestaString = Integer.toString(nRespuesta);
Respuesta = Verbal.getRespuestas(i);
//Note the change on the line below
sb.append(nRespuestaString).append("-").append(Respuesta).append(",");
}
serializer.startTag(null, "RESPUESTAS");
serializer.text(sb.toString());
serializer.endTag(null, "RESPUESTAS");
StringBuilder sb=新建StringBuilder();
对于(int i=0;i首先,您将用值覆盖字符串,而不是附加:
RespuestaString=nRespuestaString+“-”+Respuesta+“,”;
为了使代码更简洁明了,请使用StringBuilder类创建字符串
此外,这一行:
serializer.text(“RespuestaString”);
只需将值“RespuestaString”放入XML中即可。我相信您希望编写:
serializer.text(RespuestaString);
教一些最佳实践如何,比如“不要在循环中串联--使用StringBuilder”?@MarkoTopolnik好的观点-我会检查语法并更新答案。作为参考,编译器不会执行此优化吗?它不可能执行我心目中的优化,即在循环中构建字符串。javac
将只编译一个包含两个以上操作数的串联表达式nto aStringBuilder
idiom.OK,感谢您指出@MarkoTopolnik和@sm4。我已经更新了答案,使用StringBuilder
来教授正确的习惯用法,不要在append
中使用串联。使用append(x)。append(y)…
。按照现在的方式,在每次迭代中强制实例化隐式的StringBuilder
。