1. StringTokenizer
kelas
Dan sekarang beberapa skenario umum yang melibatkan bekerja dengan string. Bagaimana Anda membagi string menjadi beberapa bagian? Ada beberapa cara untuk melakukan ini.
split()
metode
Cara pertama untuk membagi sebuah string menjadi beberapa bagian adalah dengan menggunakan split()
metode tersebut. Ekspresi reguler yang mendefinisikan string pembatas khusus harus diteruskan sebagai argumen. Anda akan mempelajari ekspresi reguler dalam pencarian Java Multithreading .
Contoh:
Kode | Hasil |
---|---|
|
Hasilnya akan menjadi array dari tiga string:
|
Sederhana, tetapi terkadang pendekatan ini berlebihan. Jika ada banyak pembatas (misalnya spasi, karakter baris baru, tab, titik), maka Anda harus membuat ekspresi reguler yang agak rumit. Sulit untuk dibaca dan karena itu sulit untuk dimodifikasi.
StringTokenizer
kelas
Java memiliki kelas khusus yang tugasnya adalah membagi string menjadi substring.
Kelas ini tidak menggunakan ekspresi reguler: sebagai gantinya, Anda cukup meneruskan string yang terdiri dari pembatas. Keuntungan dari pendekatan ini adalah tidak memecah seluruh string menjadi potongan-potongan sekaligus, melainkan bergerak dari awal hingga akhir langkah demi langkah.
Kelas memiliki konstruktor dan dua metode penting. Kami meneruskan konstruktor string yang kami pisahkan menjadi beberapa bagian, dan string yang terdiri dari sekumpulan karakter pembatas.
Metode | Keterangan |
---|---|
|
Mengembalikan substring berikutnya |
|
Memeriksa apakah ada lebih banyak substring. |
Kelas ini entah bagaimana mengingatkan pada kelas Pemindai, yang juga memiliki nextLine()
dan hasNextLine()
metode.
Anda dapat membuat StringTokenizer
objek dengan perintah ini:
StringTokenizer name = new StringTokenizer(string, delimiters);
Di mana string
string harus dibagi menjadi beberapa bagian. And delimiters
adalah sebuah string, dan setiap karakter di dalamnya diperlakukan sebagai pembatas. Contoh:
Kode | Keluaran konsol |
---|---|
|
|
Perhatikan bahwa setiap karakter dalam string yang diteruskan sebagai string kedua ke StringTokenizer
konstruktor dianggap sebagai pemisah.
2. String.format()
metode dan StringFormatter
kelas
Metode lain yang menarik dari kelas String adalah format()
.
Katakanlah Anda memiliki berbagai variabel yang menyimpan data. Bagaimana Anda menampilkannya di layar dalam satu baris? Misalnya, kami memiliki beberapa data (kolom kiri) dan keluaran yang diinginkan (kolom kanan):
Kode | Keluaran konsol |
---|---|
|
|
Kode Anda mungkin akan terlihat seperti ini:
Kode program |
---|
|
Kode seperti itu tidak terlalu mudah dibaca. Dan jika nama variabelnya lebih panjang, maka kodenya akan menjadi lebih sulit:
Kode program |
---|
|
Sangat tidak enak dibaca, bukan?
Tapi ini adalah situasi umum dalam program dunia nyata, jadi saya ingin memberi tahu Anda tentang cara menulis kode ini dengan lebih sederhana dan ringkas.
String.format
Kelas String memiliki format()
metode statis: ini memungkinkan Anda menentukan pola untuk menyusun string dengan data. Tampilan umum dari perintah tersebut adalah sebagai berikut:
String name = String.format(pattern, parameters);
Contoh:
Kode | Hasil |
---|---|
|
|
|
|
|
|
Parameter pertama metode ini format()
adalah string format yang berisi semua teks yang diinginkan bersama dengan karakter khusus yang disebut penentu format (seperti %d
dan %s
) di tempat Anda perlu memasukkan data.
Metode format()
menggantikan penentu format %s
dan ini %d
dengan parameter yang mengikuti string format dalam daftar parameter. Jika kita ingin menyisipkan string, maka kita menulis %s
. Jika kita ingin memasukkan angka, maka penentu formatnya adalah %d
. Contoh:
Kode | Hasil |
---|---|
|
s adalah sama dengan"a=1, b=4, c=3" |
Berikut adalah daftar singkat penentu format yang dapat digunakan di dalam string format:
Penentu | Arti |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
bilangan asli: float ,double |
|
boolean |
|
char |
|
Date |
|
% karakter |
Penspesifikasi ini menunjukkan tipe data, tetapi ada juga penspesifikasi yang menunjukkan urutan data. Untuk mendapatkan argumen berdasarkan nomornya (penomoran dimulai dari satu), Anda perlu menulis " " alih-alih " ". Contoh:%1$d
%d
Kode | Hasil |
---|---|
|
s adalah sama dengan"a=13, b=12, c=11" |
%3$d
akan mendapatkan argumen ke-3, %2$d
akan mendapatkan argumen kedua, dan %d
akan mendapatkan argumen pertama. Penspesifikasi format %s
dan %d
mengacu pada argumen terlepas dari penspesifikasi seperti %3$d
atau%2$s
3. Kolam Tali
Setiap string yang ditentukan dalam kode sebagai string literal disimpan di area memori yang disebut saat StringPool
program sedang berjalan. StringPool
adalah array khusus untuk menyimpan string. Tujuannya adalah untuk mengoptimalkan penyimpanan string:
Pertama, string yang ditentukan dalam kode harus disimpan di suatu tempat, bukan? Kode terdiri dari perintah, tetapi data (terutama string besar) harus disimpan dalam memori secara terpisah dari kode. Hanya referensi ke objek string yang muncul dalam kode.
Kedua, semua literal string yang identik harus disimpan dalam memori hanya sekali. Dan begitulah cara kerjanya. Saat kode kelas Anda dimuat oleh mesin Java, semua literal string ditambahkan ke StringPool
jika belum ada. Jika sudah ada, maka kita cukup menggunakan referensi string dari file StringPool
.
Oleh karena itu, jika Anda menetapkan literal yang sama ke beberapa String
variabel dalam kode Anda, variabel ini akan berisi referensi yang sama. Sebuah literal akan ditambahkan StringPool
hanya sekali. Dalam semua kasus lainnya, kode akan mendapatkan referensi ke string yang sudah dimuat di file StringPool
.
Berikut kira-kira cara kerjanya:
Kode | Bekerja dengan StringPool |
---|---|
|
|
Itu sebabnya variabel a
dan b
akan menyimpan referensi yang sama.
intern()
metode
Dan bagian terbaiknya adalah Anda dapat secara terprogram menambahkan string apa pun ke file StringPool
. Untuk melakukan ini, Anda hanya perlu memanggil metode String
variabel intern()
.
Metode ini intern()
akan menambahkan string ke StringPool
jika belum ada, dan akan mengembalikan referensi ke string di StringPool
.
Jika dua string identik ditambahkan ke metode StringPool
using intern()
, metode tersebut mengembalikan referensi yang sama. Ini dapat digunakan untuk membandingkan string dengan referensi. Contoh:
Kode | Catatan |
---|---|
|
|
|
|
Anda mungkin tidak sering menggunakan metode ini, tetapi orang senang menanyakannya dalam wawancara . Jadi lebih baik mengetahuinya daripada tidak mengetahuinya.