1. StringTokenizer
kelas
Dan kini beberapa lagi senario biasa yang melibatkan kerja dengan rentetan. Bagaimanakah anda membahagikan rentetan kepada beberapa bahagian? Terdapat beberapa cara untuk melakukan ini.
split()
kaedah
Cara pertama untuk memisahkan rentetan kepada beberapa bahagian adalah dengan menggunakan split()
kaedah. Ungkapan biasa yang mentakrifkan rentetan pembatas khas mesti diluluskan sebagai hujah. Anda akan mengetahui apakah ungkapan biasa dalam pencarian Java Multithreading .
Contoh:
Kod | Hasilnya |
---|---|
|
Hasilnya akan menjadi tatasusunan tiga rentetan:
|
Mudah, tetapi kadang-kadang pendekatan ini berlebihan. Jika terdapat banyak pembatas (contohnya, ruang, aksara baris baharu, tab, noktah), maka anda perlu membina ungkapan biasa yang agak kompleks. Sukar untuk dibaca dan oleh itu sukar untuk diubah suai.
StringTokenizer
kelas
Java mempunyai kelas khas yang seluruh tugasnya adalah untuk memisahkan rentetan kepada subrentetan.
Kelas ini tidak menggunakan ungkapan biasa: sebaliknya, anda hanya lulus dalam rentetan yang terdiri daripada pembatas. Kelebihan pendekatan ini ialah ia tidak memecahkan keseluruhan rentetan menjadi kepingan sekaligus, sebaliknya bergerak dari awal hingga akhir satu langkah pada satu masa.
Kelas mempunyai pembina dan dua kaedah penting. Kami menghantar pembina rentetan yang kami bahagikan kepada bahagian, dan rentetan yang terdiri daripada satu set aksara pembatas.
Kaedah | Penerangan |
---|---|
|
Mengembalikan subrentetan seterusnya |
|
Menyemak sama ada terdapat lebih banyak subrentetan. |
Kelas ini entah bagaimana mengingatkan kelas Pengimbas, yang juga mempunyai nextLine()
dan hasNextLine()
kaedah.
Anda boleh membuat StringTokenizer
objek dengan arahan ini:
StringTokenizer name = new StringTokenizer(string, delimiters);
Di manakah string
tali itu dibahagikan kepada bahagian. Dan delimiters
ialah rentetan, dan setiap aksara di dalamnya dianggap sebagai pembatas. Contoh:
Kod | Output konsol |
---|---|
|
|
Ambil perhatian bahawa setiap aksara dalam rentetan yang diluluskan sebagai rentetan kedua kepada StringTokenizer
pembina dianggap sebagai pemisah.
2. String.format()
kaedah dan StringFormatter
kelas
Satu lagi kaedah menarik kelas String ialah format()
.
Katakan anda mempunyai pelbagai pembolehubah yang menyimpan data. Bagaimanakah anda memaparkannya pada skrin dalam satu baris? Sebagai contoh, kami mempunyai beberapa data (lajur kiri) dan output yang dikehendaki (lajur kanan):
Kod | Output konsol |
---|---|
|
|
Kod anda mungkin kelihatan seperti ini:
Kod program |
---|
|
Kod sedemikian tidak boleh dibaca. Dan jika nama pembolehubah lebih panjang, maka kod akan menjadi lebih sukar:
Kod program |
---|
|
Tidak boleh dibaca, bukan?
Tetapi ini adalah situasi biasa dalam program dunia sebenar, jadi saya ingin memberitahu anda tentang cara untuk menulis kod ini dengan lebih ringkas dan lebih ringkas.
String.format
Kelas String mempunyai format()
kaedah statik: ia membolehkan anda menentukan corak untuk memasang rentetan dengan data. Penampilan umum arahan adalah seperti berikut:
String name = String.format(pattern, parameters);
Contoh:
Kod | Hasilnya |
---|---|
|
|
|
|
|
|
Parameter pertama kaedah format()
ialah rentetan format yang mengandungi semua teks yang dikehendaki bersama-sama dengan aksara khas yang dipanggil penentu format (seperti %d
dan %s
) di tempat yang anda perlukan untuk memasukkan data.
Kaedah format()
menggantikan ini %s
dan %d
penentu format dengan parameter yang mengikut rentetan format dalam senarai parameter. Jika kita ingin memasukkan rentetan, maka kita tulis %s
. Jika kita ingin memasukkan nombor, maka penentu format ialah %d
. Contoh:
Kod | Hasilnya |
---|---|
|
s adalah sama dengan"a=1, b=4, c=3" |
Berikut ialah senarai pendek penentu format yang boleh digunakan dalam rentetan format:
Penentu | Maknanya |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
nombor nyata: float ,double |
|
boolean |
|
char |
|
Date |
|
% watak |
Penentu ini menunjukkan jenis data, tetapi terdapat juga penentu yang menunjukkan susunan data. Untuk mendapatkan hujah dengan nombornya (penomboran bermula dari satu), anda perlu menulis " " bukannya " ". Contoh:%1$d
%d
Kod | Hasilnya |
---|---|
|
s adalah sama dengan"a=13, b=12, c=11" |
%3$d
akan mendapat hujah ke-3, %2$d
akan mendapat hujah kedua, dan %d
akan mendapat hujah pertama. Penentu format %s
dan %d
merujuk kepada hujah tanpa mengira penentu seperti %3$d
atau%2$s
3. Kolam Rentetan
Setiap rentetan yang dinyatakan dalam kod sebagai literal rentetan disimpan dalam kawasan memori yang dipanggil semasa StringPool
program sedang berjalan. StringPool
ialah tatasusunan khas untuk menyimpan rentetan. Tujuannya adalah untuk mengoptimumkan storan rentetan:
Pertama, rentetan yang dinyatakan dalam kod mesti disimpan di suatu tempat, bukan? Kod terdiri daripada arahan, tetapi data (terutamanya, rentetan besar) mesti disimpan dalam memori secara berasingan daripada kod. Hanya rujukan kepada objek rentetan muncul dalam kod.
Kedua, semua literal rentetan yang sama mesti disimpan dalam ingatan sekali sahaja. Dan itulah cara ia berfungsi. Apabila kod kelas anda dimuatkan oleh mesin Java, semua literal rentetan ditambahkan pada StringPool
jika ia belum ada di sana. Jika mereka sudah ada, maka kami hanya menggunakan rujukan rentetan daripada StringPool
.
Sehubungan itu, jika anda menetapkan literal yang sama kepada beberapa String
pembolehubah dalam kod anda, maka pembolehubah ini akan mengandungi rujukan yang sama. Satu literal akan ditambahkan pada StringPool
sekali sahaja. Dalam semua kes lain, kod akan mendapat rujukan kepada rentetan yang telah dimuatkan dalam StringPool
.
Inilah kira-kira cara ia berfungsi:
Kod | Bekerja dengan StringPool |
---|---|
|
|
Itulah sebabnya pembolehubah a
dan b
akan menyimpan rujukan yang sama.
intern()
kaedah
Dan bahagian yang terbaik ialah anda boleh menambahkan sebarang rentetan secara pemrograman pada StringPool
. Untuk melakukan ini, anda hanya perlu memanggil kaedah String
pembolehubah intern()
.
Kaedah ini intern()
akan menambah rentetan kepada StringPool
jika ia belum ada, dan akan mengembalikan rujukan kepada rentetan dalam StringPool
.
Jika dua rentetan yang sama ditambah pada kaedah StringPool
menggunakan intern()
, kaedah tersebut mengembalikan rujukan yang sama. Ini boleh digunakan untuk membandingkan rentetan dengan rujukan. Contoh:
Kod | Catatan |
---|---|
|
|
|
|
Anda tidak mungkin menggunakan kaedah ini dengan kerap, tetapi orang suka bertanya tentang kaedah ini dalam temu bual . Jadi lebih baik mengetahuinya daripada tidak tahu.