Ich verwende RingBuilder, um die Zeichenfolgenbindung zu beschleunigen, aber ich denke, es gibt Zeiten, in denen ich Instanzen wiederverwenden möchte.
Dies ist beispielsweise der Implementierungscode.
Codebeispiel (C.#)
StringBuilder sb;
foreach( var x in data )
{
sb = new StringBuilder();
//Verarbeitung zum Bearbeiten einer Zeichenfolge
string text = sb.ToString();
}
Codebeispiel (Java)
StringBuilder sb;
for ( Object x : data ) {
sb = new StringBuilder();
//Verarbeitung zum Bearbeiten einer Zeichenfolge
String text = sb.toString();
}
Kurz gesagt, es wird eine Instanz neu erstellt, um die Bearbeitungszeichenfolge zu löschen.
Ich denke, es ist ein Code, den Sie oft sehen.
Der Bearbeitungsprozess selbst ist jedoch nicht sehr aufwendig. In Fällen, in denen die Kosten für die Erstellung einer Instanz von StringBuilder höher sind, sollten Sie die Instanz wiederverwenden.
Was den Titel "Unerwartet unbekannt" betrifft, bietet StringBuilder eine Möglichkeit, den internen Zeichenpuffer * (← leicht irreführende Erklärung) * zu löschen, während die Instanz am Leben bleibt.
Codebeispiel (C.#)
var sb = new StringBuilder();
foreach( var x in data )
{
sb.Length = 0; //Dadurch wird die zuvor bearbeitete Zeichenfolge gelöscht und Sie können eine neue Bearbeitung starten.
//Verarbeitung zum Bearbeiten einer Zeichenfolge
string text = sb.ToString();
}
Codebeispiel (Java)
StringBuilder sb = new StringBuilder();
for ( Object x : data ) {
sb.setLength(0);
//Verarbeitung zum Bearbeiten einer Zeichenfolge
String text = sb.toString();
}
Um ehrlich zu sein, als ich zum ersten Mal von dieser Methode erfuhr, dachte ich ** "Ich wünschte, ich hätte stattdessen die StringBuilder.Clear () -Methode vorbereitet!" **.
C#: https://msdn.microsoft.com/ja-jp/library/system.text.stringbuilder.clear(v=vs.110).aspx
Java: Ich habe es nachgeschlagen, aber Java hatte keine klareren Methoden. Wird es mit Java 9 zunehmen? ??
In Java generiert der Operator "+", der die Verkettung von Zeichenfolgen ausführt (anscheinend aus einer älteren Version), beim Kompilieren Bytecode mit StringBuilder.
Ich habe Java aus der Java 7-Ära eingegeben (als ich aufgeregt war zu hören, dass Lambdas in Java 8 hinzugefügt wurden), also wusste ich es überhaupt nicht, bis ich verschiedene Dinge recherchierte. Abgesehen davon hat sich die interne Implementierung von Teilzeichenfolgen geändert, und es scheint, dass es aufgrund seiner langen Geschichte (als C #) verschiedene Änderungen gegeben hat. Daher wäre es interessant, auch diesen Bereich zu untersuchen.
Code implementiert mit dem Plus-Operator
String a = "Korrekt,";
String b = "wir";
String c = "Weil es klug ist."
String text = a + b + c; //Ja, weil wir schlau sind.
Code, der dem Kompilierungsergebnis entspricht
String a = "Korrekt,";
String b = "wir";
String c = "Weil es klug ist."
String text = new StringBuilder().append( a ).append( b ).append( c ).toString(); //Ja, weil wir schlau sind.
** Mach StringBuilder nicht zu lang: **
Obwohl es Möglichkeiten gibt, dies zu löschen, ist StringBuilder in erster Linie ein Bearbeitungspuffer und sollte keine sehr lange Lebensdauer haben. Vor allem gibt es keine Möglichkeit, wie oft oder zehnmal die Verarbeitungsgeschwindigkeit mit diesem Clearing-Mittel erhöht werden kann.
Übertreibe es nicht.
** Es ist nur ein "Bearbeitungsbereich", ein Puffer: **
Die Haltung, dass StringBuilder nur ein Pufferbereich während der Bearbeitung ist, sollte nicht geändert werden. Das Wiederverwenden, Löschen und Verwenden einer Instanz sollte bestenfalls durch "eine Ebene unterdrückt werden, die innerhalb des Prozesses abgeschlossen wird, der mit einer einzelnen öffentlichen Methode beginnt".
Ein weiteres wichtiges Kriterium ist, ob der Code "new StringBuilder ();" zu laut wie Rauschen ist. Wenn dies im Vergleich zur kurzen und einfachen Hauptlogik zu auffällig ist, wäre es meiner Meinung nach besser, wenn Sie "sb.Clear ();" schreiben könnten, um den Code intuitiver zu gestalten.
** Denken Sie an die Length-Eigenschaft: **
Auch persönlich ist es in erster Linie nicht intuitiv, dass "ein Wert für die Länge festgelegt werden kann, eine Eigenschaft, die die Anzahl der Zeichen als Ergebnis der Bearbeitung einer Zeichenfolge erhält", und dies wird als Löschmittel bereitgestellt. Ich fragte mich, wie es wohl war. Die Länge ist schreibgeschützt, und ich denke, die Clear-Methode sollte als Mittel zum Löschen bereitgestellt werden.
Nun, es ist gut, weil ich heutzutage selten "Zeichenketten in einem Durcheinander aufbaue".
Recommended Posts