Недавно я столкнулся с идиомой, которую я раньше не видел: сборка строк по StringWriter и PrintWriter. Я имею в виду, я знаю, как их использовать, но я всегда использовал StringBuilder. Есть ли конкретная причина для предпочтения одного над другим? Метод StringBuilder кажется мне более естественным, но это просто стиль?
Я рассмотрел несколько вопросов здесь (в том числе тот, который наиболее близок: StringWriter или StringBuilder), но ни один, в котором ответы фактически не затрагивают вопрос о том, есть причина предпочесть один за другим для простой сборки строк.
Это идиома, которую я видел и использовал много раз: строковая сборка по StringBuilder:
public static String newline = System.getProperty("line.separator");
public String viaStringBuilder () {
StringBuilder builder = new StringBuilder();
builder.append("first thing").append(newline); // NOTE: avoid doing builder.append("first thing" + newline);
builder.append("second thing").append(newline);
// ... several things
builder.append("last thing").append(newline);
return builder.toString();
}
И это новая идиома: сборка строк по StringWriter и PrintWriter:
public String viaWriters() {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
printWriter.println("first thing");
printWriter.println("second thing");
// ... several things
printWriter.println("last thing");
printWriter.flush();
printWriter.close();
return stringWriter.toString();
}
Изменить Похоже, что нет никакой конкретной причины предпочесть друг другу, поэтому я принял ответ, который наилучшим образом соответствует моему пониманию, и + 1 все остальные ответы. Кроме того, я отправил свой ответ, представив результаты сравнительного теста, который я выполнил, в ответ на один из ответов. Спасибо всем.
Изменить снова Оказывается, есть конкретная причина предпочесть один (в частности, StringBuilder) над другим. То, что я пропустил в первый раз, было добавлением новой строки. Когда вы добавляете новую строку (как указано выше, как отдельную добавку), она немного быстрее - не очень, но в сочетании с ясностью намерения, это определенно лучше. См. Мой ответ ниже для улучшения таймингов.