J'utilise RingBuilder pour accélérer la liaison de chaînes, mais je suis sûr qu'il y a des moments où je veux réutiliser des instances.
Par exemple, il s'agit du code d'implémentation.
Exemple de code (C#)
StringBuilder sb;
foreach( var x in data )
{
sb = new StringBuilder();
//Traitement pour modifier une chaîne de caractères
string text = sb.ToString();
}
Exemple de code (Java)
StringBuilder sb;
for ( Object x : data ) {
sb = new StringBuilder();
//Traitement pour modifier une chaîne de caractères
String text = sb.toString();
}
En bref, il s'agit de recréer une instance dans le but d'effacer la chaîne d'édition.
Je pense que c'est un code que vous voyez souvent.
Cependant, le processus d'édition lui-même n'est pas très lourd, et dans les cas où le coût de création d'une instance de StringBuilder est plus élevé, vous souhaiterez réutiliser l'instance.
Ainsi, comme pour le titre "Inconnu de manière inattendue", StringBuilder fournit un moyen de vider le tampon de caractères interne * (← explication légèrement trompeuse) * tout en gardant l'instance en vie.
Exemple de code (C#)
var sb = new StringBuilder();
foreach( var x in data )
{
sb.Length = 0; //Cela efface la chaîne précédemment modifiée et vous permet de démarrer une nouvelle modification.
//Traitement pour modifier une chaîne de caractères
string text = sb.ToString();
}
Exemple de code (Java)
StringBuilder sb = new StringBuilder();
for ( Object x : data ) {
sb.setLength(0);
//Traitement pour modifier une chaîne de caractères
String text = sb.toString();
}
Pour être honnête, quand j'ai découvert cette méthode pour la première fois, j'ai pensé ** "J'aurais aimé préparer la méthode StringBuilder.Clear () à la place!" **.
C#: https://msdn.microsoft.com/ja-jp/library/system.text.stringbuilder.clear(v=vs.110).aspx
Java: J'ai recherché, mais Java n'avait pas de méthodes plus claires. Va-t-il augmenter avec Java 9? ??
En Java, l'opérateur "+", qui fait la concaténation de chaînes (apparemment à partir d'une ancienne version), générera du bytecode en utilisant StringBuilder une fois compilé.
Je suis entré en Java à partir de l'ère Java 7 (quand j'étais excité d'apprendre que des lambdas avaient été ajoutés dans Java 8), donc je ne savais pas du tout jusqu'à ce que je fasse des recherches sur diverses choses. En dehors de cela, l'implémentation interne de substring a changé, et il semble qu'il y ait eu divers changements en raison de sa longue histoire (que C #), il est donc intéressant d'étudier ce domaine également.
Code implémenté avec l'opérateur plus
String a = "C'est vrai,";
String b = "nous";
String c = "Parce que c'est intelligent."
String text = a + b + c; //Oui, parce que nous sommes intelligents.
Code équivalent au résultat de la compilation
String a = "C'est vrai,";
String b = "nous";
String c = "Parce que c'est intelligent."
String text = new StringBuilder().append( a ).append( b ).append( c ).toString(); //Oui, parce que nous sommes intelligents.
** Ne rendez pas StringBuilder trop long: **
Bien qu'il existe des moyens de l'effacer, StringBuilder est un tampon d'édition en premier lieu et ne devrait pas avoir une très longue durée de vie. Surtout, il n'y a pas de nombre de fois ou de dizaines de fois la vitesse de traitement peut être augmentée en utilisant ce moyen de compensation.
N'en faites pas trop.
** C'est juste une "zone d'édition", un tampon: **
La position selon laquelle StringBuilder n'est qu'une zone tampon au milieu de l'édition ne doit pas être modifiée, La réutilisation d'une instance, son effacement et son utilisation doivent être supprimés au mieux par "un niveau qui est terminé dans le processus qui commence par une seule méthode publique".
Un autre critère important est de savoir si le code "new StringBuilder ();" est trop fort comme du bruit. Si cela est trop visible par rapport à la logique principale courte et simple, je pense que ce serait mieux si vous pouviez écrire "sb.Clear ();" pour rendre le code plus intuitif.
** En pensant à la propriété Length: **
En outre, personnellement, il n'est pas intuitif en premier lieu qu '"une valeur puisse être définie pour Longueur, qui est une propriété qui obtient le nombre de caractères suite à la modification d'une chaîne de caractères", et ceci est fourni comme moyen d'effacement. Je me suis demandé comment c'était. La longueur est en lecture seule et je pense que la méthode Clear devrait être fournie comme moyen de compensation.
Eh bien, c'est bien parce que je fais rarement "construire des chaînes de caractères dans le désordre" ces jours-ci.
Recommended Posts