Obwohl Java basierend auf C ++ entwickelt wurde, hat es viele der Mängel von C ++ verbessert. Eines der Dinge, die erwähnt werden müssen, sind Zeichenfolgen. Wir wissen, dass Sie bei der Eingabe von MFC bei der Verarbeitung von Zeichenfolgen oder Zeichen häufig das _t () -Makro verwenden müssen, um Zeichen oder Zeichenfolgen in einen Unicode -Typ zu verwandeln. Andernfalls tritt während der Verarbeitung ein Fehler auf. In Java ist der in der Charakterklasse gespeicherte Charakter -Char oder Charaktere kein Byte, sondern 2 Bytes. Unicode wird verwendet, um alle Charaktere der Welt zu unterstützen.
Die Abfolge von Zeichen bildet eine Zeichenfolge, und es gibt zwei Arten von Zeichenfolgen: Eine ist eine String -Konstante, die nach der Erstellung nicht modifiziert werden muss, was als String -Konstante bezeichnet wird. In Java wird es mit der String -Klasse gespeichert.
Eine ist eine Zeichenfolgenvariable, die nach der Erstellung geändert werden muss, die als Zeichenfolgenvariable bezeichnet wird. In Java wird es unter Verwendung der StringBuffer -Klasse betrieben und verwaltet.
StringBuffer -Klasse
1. Erstellen Sie ein StringBuffer -Klassenobjekt
Das StringBuffer -Klasse -Objekt repräsentiert eine String -Variable (beachten Sie, dass es sich um eine "Variable" handelt). Jedes StringBuffer -Klassenobjekt ist eine String -Variable, die erweitert und geändert werden kann. Im Folgenden finden Sie die häufig verwendeten Konstruktoren der StringBuffer -Klasse:
(1) Public StringBuffer ()
Erstellen Sie ein neues leeres Objekt der StringBuffer -Klasse mit dem Anfangswert seiner Kapazität auf 16 Zeichen (beachten Sie, dass es 16 Zeichen sind).
(2) öffentlicher StringBuffer (intlänge)
Erstellen Sie ein neues leeres StringBuffer -Objekt, dessen Kapazitäts -Anfangswert auf Längenzeichen gesetzt ist
(3) Public StringBuffer (String Str)
Erstellen Sie ein neues StringBuffer -Objekt, dessen Inhalt der Inhalt von STR ist, und die Kapazität wird auf die Länge von STR gesetzt und 16 Zeichen hinzufügen (Hinweis: Fügen Sie 16 Zeichen hinzu).
2. Häufige Methoden des StringBuffer -Klasse -Objekts
(1) Erweiterung des StringBuffer -Klasse -Objekts
Die StringBuffer -Klasse bietet zwei Methodensätze, um die im StringBuffer -Objekt enthaltenen Zeichen zu erweitern, nämlich:
1) Public StringBuffer Append
(Objekt obj)
Mit der Anhangsmethode wird die im StringBuffer -Objekt enthaltenen Zeichen erweitert. Nach dem Konvertieren des angegebenen Parameterobjekts in eine Zeichenfolge findet es nach dem ursprünglichen StringBuffer -Objekt an und gibt das neue StringBuffer -Objekt zurück. Die zusätzlichen Parameterobjekte können von verschiedenen Datentypen wie int, char, String, doppelt usw. sein.
2) öffentliche StringBuffer -Einsatz (
Int -Position -Offset, Parameterobjekttyp, Parameterobjektname)
Diese Methode wandelt das angegebene Parameterobjekt in eine Zeichenfolge um, fügt es in der angegebenen Position im ursprünglichen StringBuffer -Objekt ein und gibt das neue StringBuffer -Objekt zurück.
(2) Die Länge und Kapazität des StringBuffer -Klassenobjekts
Die Länge eines StringBuffer -Klasse -Objekts bezieht sich auf die Anzahl der enthälten Zeichen; Die Kapazität bezieht sich auf die Anzahl der zugewiesenen Charakterräume.
1) öffentliche int länge ()
Diese Methode gibt die Anzahl der im aktuellen StringBuffer -Klasse enthaltenen Zeichen zurück.
2) öffentliche Int -Kapazität ()
Diese Methode gibt die Anzahl der Zeichenspeicher zurück, die vom aktuellen StringBuffer -Klassenobjekt zugewiesen wurden.
(3) Änderung des StringBuffer -Klassenobjekts
öffentliche void setcharat (intindex, caparch)
Diese Methode ersetzt das Zeichen an der Indexposition im aktuellen StringBuffer -Objekt durch das angegebene Zeichen CH.
(4) Zuordnung und Zugabe von Strings
Zeichenfolgen sind Datentypen, die häufig in Programmen verwendet werden. Die Zuordnung und Zugabe von Zeichenfolgen werden im Java -Kompilierungssystem eingeführt.
(5) Andere Methoden ähneln denen der String -Klasse
3.. Verwenden Sie die StringTokenizer -Klasse, um Saiten zu zersetzen
Die StringTokenizer -Klasse befindet sich im Java.util -Paket und wird bei dieser Klasse zu Beginn des Programms hinzugefügt.
Importjava.util.Stringtokenizer oder
Importjava.util.*
StringTokenizer -Klasse
Für die StringTokenizer -Klasse besteht die Hauptfunktion darin, die Zeichenfolge entsprechend dem angegebenen Split -Zeichen zu teilen, und seine Funktion ähnelt der Split -Methode der String -Klasse
1. Der Konstruktor der StringTokenizer -Klasse
(1) StringTokenizer (Stringstr)
Erstellen Sie ein StringOkenizer -Objekt für den angegebenen String -String, dessen Trennzeichen auf "/t/n/r/f" eingestellt ist, dh Platz: Platz, horizontale Registerkarte, Zeilenunterbrechung, Kutschenrückgabe, Tabellenzeichen
(2) StringTokenizer (String Str, String Delim)
Erstellen Sie ein StringOkenizer -Objekt für die angegebene String -STR, deren Trennzeichen die angegebene Zeichenfolge ist, und enthält standardmäßig keinen Trennzeichen.
3) StringTokenizer (String Str, String Delim, Boolean ReturnDelims)
Erstellen Sie ein StringOkenizer -Objekt für den angegebenen String -STR, dessen Trennzeichen die angegebene Zeichenfolge ist. Wenn returndelims wahr ist, enthält jede Zeichenfolge im erstellten StringOkenizer -Objekt einen Trennzeichen, andernfalls enthält sie keinen Trennzeichen.
2. Gemeinsame Methoden der StringTokenizer -Klasse
NintCountTokens ()
Gibt die Anzahl der Substrings im StringKokenizer -Objekt nach der Aufteilung zurück
NBOOLEANHASMOREELEMENTS ()
Die Funktion dieser Methode ist die gleiche wie die von HasMoretokens () -Methode
NBOOLEANHASMORETOKENS ()
Erkennen Sie, ob das StringOkenizer -Objekt ein geteiltes Substring enthält. In diesem Fall wird es wahr zurückgegeben, sonst gibt es false zurück.
ObjectNextElement ()
Diese Methode hat die gleiche Funktion wie NextToken (). Der Hauptunterschied besteht darin, dass es nicht ein String -Objekt, sondern ein Objektobjekt zurückgibt
StringNextToken ()
Geben Sie das nächste geteilte Substring im StringOkenizer -Objekt zurück
StringNextToken (String Delim)
Gibt das nächste Split -Substring im StringKokenizer -Objekt zurück, der Trennzeichen wird jedoch auf Delim zurückgesetzt
In einigen Programmiersprachen wie C besteht die Zeichenfolge aus Zeichenarrays, und das Ende jeder Zeichenfolge ist "/0" gekennzeichnet, aber dies ist in Java nicht der Fall.
Nin Java, Saiten existieren normalerweise als Objekte der String -Klasse, wie z. B. Strings = "Ich mag Java!", Wo "ich Java mag!" ist ein Objekt.
Daher sind Saiten und Charakter -Arrays in Java völlig unterschiedlich und unterscheiden sich auch von Saiten in C!
Nin Anordnung zur Erleichterung der Umwandlung von String- und Charakter -Arrays, viele dieser Konstruktoren und Methoden sind in der String -Klasse bereitgestellt
n, wie z. B. Konstruktor String (char [] Wert)
n Methode tocharArray ()
Methodenwert (char [] Daten)
Konstanter Pool
Für String -Konstanten, die im Quellprogramm erscheinen, werden sie beim Ausführen des Programms für Cache in einem konstanten Pool gespeichert.
Durch den Vergleich von Variablen, die auf diese in konstanten Pools zwischengespeicherten Zeichenfolgen verweisen, wird auch das richtige Ergebnis mit == erhalten.
Zur Laufzeit werden jedoch verschiedene Vorgänge auf Zeichenfolgen wie +, Substring usw. neue String -Objekte erzeugen.
Aber leistungsstarke Compiler optimieren die Nähte von Stringkonstanten, z. Für variable Vorgänge ist es jedoch unmöglich, die virtuelle Maschine wie S1 + S2 durchzuführen und festzustellen, ob sich das Ergebnis bereits im konstanten Pool befindet. Verwenden Sie daher gleich anstelle von ==, um festzustellen, ob zwei Zeichenfolgen gleich sind.
public static void main (String [] args) {// String -Konstanten werden in konstantem Pool gebracht. String S1 = "Hallo"; String S2 = "Hallo"; String S3 = "Hell" + "O"; System.out.println (S1 == S2); System.out.println (S1 == S3); // Betrieb wie +, Substring auf String Erstellen Sie neue. String S4 = "Hell"; String S5 = S4 + "O"; System.out.println (S1 == S5); System.out.println (S1.Equals (S5)); // Substring hat einen speziellen Handle auf Substring (0) String S6 = S1.Substring (0); System.out.println (S1 == S6); }Testen Sie die Bytecodes von S1, S2, S3:
0: LDC #16; // String Hallo
2: store_1
3: LDC #16; // String Hallo
5: store_2
6: LDC #16; // String Hallo
8: store_3
Testen Sie die Bytecodes von S4 und S5:
41: LDC #30; // String Hell
43: Store 4
45: Neu #32; // Klasse Java/Lang/StringBuilder
48: DUP
49: Aload 4
51: invokestatic #34; // Methode Java/Lang/String.Valueof: (ljava/lang/objekt;) ljava/lang/String;
54: Invokespecial #40; // Methode Java/Lang/StringBuilder. "<In init>" :( Ljava/Lang/String;) v
57: LDC #43; // String o
59: InvokeVirtual #45; // Methode Java/Lang/StringBuilder.Append: (ljava/lang/string;) ljava/Lang/StringBuilder;
62: InvokeVirtual #49; // Methode Java/Lang/StringBuilder.toString :() Ljava/Lang/String;
Beachten Sie, dass die Substring-Methode Substring (0,3) eine Zeichenfolge ist, die von den Zeichen von 0 bis 2. ausgeht. Der Grund für dieses Design kann sein, dass es einfach ist, die Länge des Substring 3-0 = 3 zu berechnen. Gleichzeitig verfügt Substring über eine spezielle Optimierungsverarbeitung für spezielle Parameter:
public String substring (int begindex, int EndIndex) {if (begindex <0) {neue StringIndexoutOfBoundSexception (begindex); } if (EndIndex> count) {throck -stringIndexoutOfBoundSexception (EndIndex); } if (begindeIndex> endindex) {throck neue stringIndexoutofBoundSexception (EndIndex - begindex); } return ((begindex == 0) && (endindex == count))? Dies: New String (Offset + begindex, EndIndex - begindex, Wert); } Daraus können wir erkennen, dass hinter dem String -Objekt nichts Magisches steckt und ein Verständnis von Bytecode es besser verstehen kann.
Tatsächlich werden viele Informationen zu Klassen und Methoden im konstanten Pool gespeichert, z. B. Paketamen, Klassennamen, Methodensignaturen usw. Wenn Sie interessiert sind, können Sie eingehende Forschungen durchführen.