我已经阅读了Java中的StringBuilder类,我想知道,执行某项任务的更有效方法是什么:
使用“+”连接:
String result = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:y=\"http://api.yandex.ru/yaru/\">"
+ "<title>" + (et_title.getText().toString()) + "</title>" +
"<y:access>"+ privacymode +"</y:access>" +
"<category scheme=\"urn:ya.ru:posttypes\" term=\"link\"/>"
+ "<y:meta>" + "<y:url>" + (et_link.getText().toString()) + "</y:url>" +
"</y:meta>" +
"<content>" + signature_select() + "</content>"
+ "</entry>";
或
StringBuilder sb = new StringBuilder();
sb.append( "<?xml version=\"1.0\" encoding=\"utf-8\"?>")
.append("<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:y=\"http://api.yandex.ru/yaru/\">")
.append("<title>")
.append(et_title.getText().toString())
.append("</title>")
.append("<y:access>"+ privacymode +"</y:access>")
.append( "<category scheme=\"urn:ya.ru:posttypes\" term=\"link\"/>")
.append("<y:meta>" + "<y:url>" + (et_link.getText().toString()) + "</y:url>" + "</y:meta>")
.append( "<content>" + signature_select() + "</content>")
.append("</entry>");
String result = sb.toString();
答案 0 :(得分:0)
这看起来令人担心过早优化。如果这是一次性的代码并且没有在紧密循环中调用,为什么要担心优化呢?
话虽如此,大多数情况下,xml文本可以在文本文件中找到,而不是在程序中进行硬编码,然后你将使用循环和StringBuilder,即
StringBuilder xmlSb = new StringBuilder();
Scanner xmlScanner = new Scanner(Foo.class.getResourceAsStream(RESOURCE));
while (xmlScanner.hasNextLine()) {
xmlSb.append(xmlScanner.nextLine());
}
if (xmlScanner != null) {
xmlScanner.close();
}
// parse and use your xml text here
答案 1 :(得分:0)
编辑 :看起来Java编译器会优化字符串连接(+)版本,因此两个版本都具有相同的性能,有利于第一个更具可读性。 将我以前的答案留给历史目的。
感谢您的评论!
StringBuilder 版本更好。
我还打破了StringBuilder版本中的其他连接,例如:
.append("<y:access>"+ privacymode +"</y:access>")
为:
.append("<y:access>")
.append(privacymode)
.append("</y:access>")
使用StringBuilder的最大优点是避免为每个连接分配新的字符串,而StringBuilder将仅在必要时分配和调整其内部字符数组的大小。如果你知道最终字符串的大小会更好。然后,您可以使用其最终大小初始化StringBuilder,并避免任何额外的内存分配。