Das Innenleben von Strings und die Teilstring-Methode – 1

„Hallo, Amigo!“

„Hallo, Ellie.“

„Ich werde Ihnen etwas über Teilstrings erzählen. Ein Teilstring ist ein Teil eines Strings. Und die häufigste Operation, die an Strings ausgeführt wird (nachdem mehrere Strings miteinander kombiniert wurden), ist das Erhalten eines Teilstrings.“

7) Wie erhalte ich einen Teil eines Strings?

„Die Teilstring-Methode gibt einen Teil eines Strings zurück. Diese Methode hat zwei Versionen.“

„Die erste Version gibt die durch Start- und Endindizes angegebene Teilzeichenfolge zurück. Das Zeichen am Endindex ist jedoch nicht enthalten! Wenn Sie die Zahlen 1 und 3 übergeben, enthält die Teilzeichenfolge nur das zweite und dritte Zeichen (denken Sie an den Anfang der Indizes). mit 0).“

„Die zweite Version gibt den Teilstring beginnend vom übergebenen Index bis zum Ende des Strings zurück.“

Methode(n) Beispiel(e)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Ergebnis:

s == "ood n";
String substring(int beginIndex)
String s = "Good news, everyone!";
s = s.substring(1);

„Das ist ganz einfach. Danke, Ellie.“

„Ich werde Ihnen auch die interne Funktionsweise von String-Objekten erklären.“

„Wie Sie wahrscheinlich bereits wissen, ist String eine unveränderliche Klasse. Und welche Vorteile bringt uns das? Tatsächlich ist einer der Hauptvorteile die Möglichkeit, einen Teilstring zu erhalten. Aber das Wichtigste zuerst.“

„Intern enthält ein String-Objekt ein Array von Zeichen, was nicht so schwer zu erraten ist. Es speichert aber auch zwei weitere Variablen: den Index des ersten Zeichens im Array und die Zeichenanzahl. Jetzt werde ich Ihnen sagen, was das ist.“ werden verwendet für.“

„Wenn wir mit der Substring- Methode einen Teilstring erstellen, wird ein neues String- Objekt erstellt.“

„Aber anstatt einen Verweis auf ein neues Zeichenarray zu speichern, speichert das Objekt einen Verweis auf das alte Array sowie zwei Variablen, die es verwendet, um den Teil des ursprünglichen Zeichenarrays zu bestimmen, der ihm zugeordnet ist.“

„Ich habe nichts davon verstanden.“

„Wenn ein Teilstring erstellt wird, wird das Zeichenarray nicht in das neue String-Objekt kopiert. Stattdessen speichern beide Objekte einen Verweis auf das ursprüngliche Zeichenarray. Aber! Das zweite Objekt speichert auch zwei Variablen: seinen Startindex im Array und die Anzahl der Zeichen, die zum Teilstring gehören.“

"Hör zu:"

Einen Teilstring abrufen Was im Teilstring gespeichert ist
String s = "mama";
Was ist in s gespeichert:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Was ist in s2 gespeichert:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Was ist in s3 gespeichert:

char[] value = {'m','a','m','a'};
offset = 1;
count = 2;

„Alle drei Strings speichern einen Verweis auf dasselbe char-Array, aber sie speichern auch den Index des ersten und letzten Zeichens, das zu ihnen gehört. Oder genauer gesagt, den Index des ersten Zeichens und die Zeichenanzahl.“

„Das macht jetzt Sinn.“

„Wenn Sie also einen String mit einer Länge von 10.000 Zeichen nehmen und 10.000 Teilstrings beliebiger Länge erstellen, verbrauchen diese Teilstrings sehr wenig Speicher, da das Zeichenarray nicht dupliziert wird. Diese Strings würden voraussichtlich viel verbrauchen Speicherplatz, wird buchstäblich nur ein paar Bytes beanspruchen.

"Cool!"

„Aber könnten Sie das tun, wenn Sie Strings ändern könnten?“

„Nein, jemand könnte den ersten String ändern, und dann würden sich auch alle seine Teilstrings ändern. Jetzt ergibt es Sinn, warum sie das getan haben. Das ist eine wirklich coole Lösung.“

"Ich bin froh, dass es dir gefällt."