Meskipun Java dikembangkan berdasarkan C ++, ia telah meningkatkan banyak kekurangan C ++. Salah satu hal yang harus disebutkan adalah string. Kita tahu bahwa dengan pendalaman pembelajaran, saat memasuki MFC, saat memproses string atau karakter, Anda sering perlu menggunakan makro _t () untuk mengubah karakter atau string menjadi tipe unicode. Jika tidak, bug akan terjadi selama pemrosesan. Di Java, karakter karakter atau karakter yang disimpan di kelas karakter bukanlah satu byte, tetapi 2 byte. Unicode digunakan, yaitu untuk mendukung semua karakter di dunia.
Urutan karakter membentuk string, dan ada dua jenis string: satu adalah konstanta string yang tidak perlu dimodifikasi setelah pembuatan, yang disebut konstanta string. Di Java, disimpan menggunakan kelas string;
Salah satunya adalah variabel string yang perlu dimodifikasi setelah pembuatan, disebut variabel string. Di Java, dioperasikan dan dikelola dengan menggunakan kelas StringBuffer.
Kelas StringBuffer
1. Buat Objek Kelas StringBuffer
Objek kelas StringBuffer mewakili variabel string (perhatikan bahwa itu adalah "variabel"). Setiap objek kelas StringBuffer adalah variabel string yang dapat diperluas dan dimodifikasi. Berikut ini adalah konstruktor kelas StringBuffer yang umum digunakan:
(1) Public StringBuffer ()
Buat Objek Kosong Baru dari StringBuffer Class, dengan nilai awal kapasitasnya diatur ke 16 karakter (perhatikan bahwa itu adalah 16 karakter)
(2) Public StringBuffer (panjang int)
Buat Objek StringBuffer Kosong Baru, yang nilai awal kapasitasnya diatur ke karakter panjang
(3) Public StringBuffer (string str)
Buat objek StringBuffer baru, yang isinya adalah konten STR, dan kapasitas diatur ke panjang STR dan tambahkan 16 karakter (Catatan: Tambahkan 16 karakter)
2. Metode Umum Objek Kelas StringBuffer
(1) Perpanjangan Objek Kelas StringBuffer
Kelas StringBuffer menyediakan dua set metode untuk memperluas karakter yang terkandung dalam objek StringBuffer, yaitu:
1) Publik StringBuffer Tambahkan
(Objek obj)
Metode Append digunakan untuk memperluas karakter yang terkandung dalam objek StringBuffer. Setelah mengubah objek parameter yang ditentukan menjadi string, tambahkannya setelah objek StringBuffer asli, dan mengembalikan objek StringBuffer baru. Objek parameter tambahan dapat berupa berbagai tipe data, seperti int, char, string, ganda, dll.
2) Sisipan Public StringBuffer (
Insert Posisi Offset Posisi, Jenis Objek Parameter, Nama Objek Parameter)
Metode ini mengubah objek parameter yang ditentukan menjadi string, memasukkannya pada posisi yang ditentukan dalam objek StringBuffer asli, dan mengembalikan objek StringBuffer baru.
(2) Panjang dan kapasitas objek kelas StringBuffer
Panjang objek kelas StringBuffer mengacu pada jumlah karakter yang dikandungnya; Kapasitas mengacu pada jumlah ruang karakter yang dialokasikan.
1) Panjang int publik ()
Metode ini mengembalikan jumlah karakter yang terkandung dalam objek kelas StringBuffer saat ini.
2) kapasitas int publik ()
Metode ini mengembalikan jumlah ruang karakter yang dialokasikan oleh objek kelas StringBuffer saat ini.
(3) Modifikasi Objek Kelas StringBuffer
public void setCharat (intindex, chearch)
Metode ini menggantikan karakter pada posisi indeks pada objek StringBuffer saat ini dengan karakter yang ditentukan CH.
(4) Penugasan dan penambahan string
String adalah tipe data yang sering digunakan dalam program. Tugas dan penambahan string diperkenalkan dalam sistem kompilasi Java.
(5) Metode lain mirip dengan kelas string
3. Gunakan kelas StringTokenizer untuk menguraikan string
Kelas StringTokenizer terletak di paket Java.util, dan ketika menggunakan kelas ini, ditambahkan di awal program.
imporJava.util.stringTokenizer atau
imporjava.util.*
Kelas StringTokenizer
Untuk kelas StringTokenizer, fungsi utamanya adalah untuk membagi string sesuai dengan karakter split yang diberikan, dan fungsinya mirip dengan metode split dari kelas string
1. Konstruktor kelas StringTokenizer
(1) StringTokenizer (stringstr)
Buat objek StringTokenizer untuk string string yang diberikan, yang pembatasnya diatur ke "/t/n/r/f", yaitu: ruang, tab horizontal, istirahat garis, pengembalian kereta, karakter tabel
(2) StringTokenizer (string str, string delim)
Buat objek StringTokenizer untuk string string yang diberikan, yang pembatasnya adalah string delim yang ditentukan, dan tidak mengandung pembatas secara default.
3) StringTokenizer (string str string, string delim, boolean returnDelims)
Buat objek StringTokenizer untuk string string yang diberikan yang pembatasnya adalah string delim yang ditentukan. Jika returnDelims benar, setiap string dalam objek StringTokenizer yang dibuat berisi pembatas, jika tidak ia tidak mengandung pembatas.
2. Metode Umum Kelas StringTokenizer
nintcounttokens ()
Mengembalikan jumlah substring dalam objek StringTokenizer setelah dibagi
nbooleanhasmoreelements ()
Fungsi metode ini sama dengan metode hasmoretokens ()
nbooleanhasmoretokens ()
Mendeteksi apakah objek StringTokenizer berisi substring yang terbagi. Jika demikian, itu akan mengembalikan true, jika tidak itu akan mengembalikan false.
ObjectNextElement ()
Metode ini memiliki fungsi yang sama dengan nextToken (). Perbedaan utama adalah bahwa ia tidak mengembalikan objek string, tetapi objek objek
StringNextToken ()
Kembalikan substring split berikutnya di objek StringTokenizer
StringNextToken (String Delim)
Mengembalikan substring split berikutnya dalam objek StringTokenizer, tetapi pembatasnya diatur ulang ke Delim
Fakta nin, dalam beberapa bahasa pemrograman, seperti C, string terdiri dari array karakter, dan akhir setiap string ditandai "/0", tetapi ini tidak terjadi di Java.
Nin Java, string biasanya ada sebagai objek kelas string, seperti: string = "Aku suka java!", Di mana "Aku suka java!" adalah objek.
Oleh karena itu, string dan array karakter di Java benar -benar berbeda, dan mereka juga berbeda dari string di C!
Nin Order untuk memfasilitasi konversi array string dan karakter, banyak konstruktor dan metode tersebut disediakan di kelas string
n, seperti string konstruktor (nilai char [])
n metode tochararray ()
Nilai metode dari data (char [])
Kolam konstan
Untuk konstanta string yang muncul dalam program sumber, ketika program berjalan, mereka akan disimpan ke kumpulan konstan untuk cache.
Membandingkan variabel yang merujuk string ini di -cache di kolam konstan juga akan mendapatkan hasil yang benar dengan ==.
Namun, saat runtime, berbagai operasi pada string seperti +, substring, dll. Akan menghasilkan objek string baru.
Tetapi kompiler yang kuat akan mengoptimalkan jahitan konstanta string, seperti ketika s3 = "neraka" + "o", S3 masih akan menunjuk ke string di kumpulan konstan. Namun, untuk operasi variabel, tidak mungkin untuk meminta mesin virtual untuk melakukan seperti S1 + S2 dan untuk menentukan apakah hasilnya sudah ada di kumpulan konstan. Oleh karena itu, gunakan sama, bukan == untuk menentukan apakah dua string sama.
public static void main (string [] args) {// konstanta string dimasukkan ke dalam kumpulan konstan. String s1 = "halo"; String s2 = "halo"; String s3 = "neraka" + "o"; System.out.println (S1 == S2); System.out.println (S1 == S3); // Operasi seperti +, Substring pada String Buat yang baru. String s4 = "neraka"; String s5 = s4 + "o"; System.out.println (S1 == S5); System.out.println (S1.Equals (S5)); // Substring memiliki pegangan khusus pada substring (0) string S6 = s1.substring (0); System.out.println (S1 == S6); }Uji bytecode S1, S2, S3:
0: LDC #16; // string halo
2: Store_1
3: LDC #16; // string halo
5: Store_2
6: LDC #16; // string halo
8: Store_3
Uji bytecode S4 dan S5:
41: LDC #30; // string neraka
43: Toko 4
45: baru #32; // kelas java/lang/stringbuilder
48: DUP
49: Aload 4
51: Invokestatic #34; // metode java/lang/string.valueof: (ljava/lang/objek;) ljava/lang/string;
54: Invokespecial #40; // Metode Java/Lang/StringBuilder. "<inin>" :( ljava/lang/string;) v
57: LDC #43; // string o
59: Invokevirtual #45; // metode java/lang/stringbuilder.append: (ljava/lang/string;) ljava/lang/stringbuilder;
62: Invokevirtual #49; // metode java/lang/stringbuilder.tostring :() ljava/lang/string;
Perhatikan bahwa metode substring, substring (0,3) adalah string yang mendapat dari karakter 0 hingga 2. Alasan untuk desain ini mungkin mudah untuk menghitung panjang substring, 3-0 = 3. Pada saat yang sama, substring memiliki pemrosesan optimasi khusus untuk parameter khusus:
Public String Substring (int beginIndex, int endIndex) {if (beginIndex <0) {throw New StringIndexOutOfBoundSException (beginIndex); } if (endIndex> count) {lempar stringIndExoutOfBoundsException baru (endIndex); } if (beginIndex> endIndex) {throw stringIndexOutOfBoundsException baru (EndIndex - beginIndex); } return ((beginIndex == 0) && (endIndex == count))? Ini: string baru (offset + beginIndex, endIndex - beginIndex, value); } Dari sini kita dapat melihat bahwa tidak ada keajaiban di balik objek string, dan memiliki beberapa pemahaman tentang bytecode dapat lebih memahaminya.
Bahkan, banyak informasi tentang kelas dan metode disimpan di kumpulan konstan, seperti nama paket, nama kelas, tanda tangan metode, dll. Jika Anda tertarik, Anda dapat melakukan penelitian mendalam.