J'ai récemment rencontré un idiome je n'ai pas vu avant: chaîne d'assemblage par StringWriter et PrintWriter. Je veux dire, je sais comment les utiliser, mais j'ai toujours utilisé des StringBuilder. Est-il une raison concrète pour préférer l'un sur l'autre? La méthode StringBuilder semble beaucoup plus naturel pour moi, mais c'est juste le style?
J'ai regardé plusieurs questions (y compris celle qui vient le plus proche: StringWriter ou StringBuilder ), mais aucun dans laquelle les réponses réellement répondre à la question de savoir s'il y a une raison de préférer l'un sur l'autre pour la simple chaîne de montage.
C'est le langage que j'ai vu et utilisé de nombreuses fois: chaîne d'assemblage par 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();
}
Et c'est le nouveau langage: chaîne d'assemblage par StringWriter et 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();
}
Edit Il semble qu'il n'y a pas de béton raison de préférer l'un sur l'autre, j'ai donc accepté la réponse qui correspond le mieux à ma compréhension, et de +1ed toutes les autres réponses. En outre, j'ai posté une réponse de ma propre, donnant les résultats de l'analyse comparative que j'ai couru, en réponse à l'une des réponses. Merci à tous.
Éditer à nouveau , Il s'avère qu'il y est une raison concrète de préférer l'un (en particulier le StringBuilder) sur l'autre. Ce que j'ai raté la première fois a été l'ajout de la nouvelle ligne. Lorsque vous ajoutez un saut de ligne (comme ci-dessus, en tant que distinct append), il est légèrement plus rapide - pas énormement, mais couplé avec la clarté d'intention, c'est certainement mieux. Voir ma réponse ci-dessous pour l'amélioration des timings.