Coretan kuliah dengan mentor sebagai sebahagian daripada kursus Universiti Codegym. Daftar untuk kursus penuh.
"Hai, Amigo! Hari ini kita akan menganalisis beberapa lagi senario biasa yang melibatkan kerja dengan rentetan. Contohnya, adakah anda tahu cara membahagikan rentetan kepada beberapa bahagian?"
"Saya tidak akan memberitahu awak dengan segera, Ellie. Tetapi awak akan memberitahu saya, kan?"
split()
kaedah
"Terdapat beberapa cara untuk melakukan ini. Cara pertama untuk membahagikan rentetan kepada beberapa bahagian ialah menggunakan kaedah split()
. Ungkapan biasa yang mentakrifkan rentetan pembatas khas mesti diluluskan sebagai parameter. Anda akan mempelajari apa yang terdapat dalam ungkapan biasa pencarian Java Collections .
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."
"Baiklah, pasti. Dan jika ia sukar dibaca, maka sukar untuk membuat perubahan.
StringTokenizer
kelas
Coretan kuliah dengan mentor sebagai sebahagian daripada kursus Universiti Codegym. Daftar untuk kursus penuh.
"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 demi satu.
Kelas mempunyai pembina dan dua kaedah. 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 saya kepada kelas Pengimbas, yang juga mempunyai nextLine()
dan hashNextLine()
kaedah.
"Itu pemerhatian yang baik yang anda buat. Anda boleh mencipta StringTokenizer
objek dengan arahan ini:
StringTokenizer name = new StringTokenizer(string, delimiters);
Di mana rentetan ialah rentetan yang akan dibahagikan kepada bahagian. Dan pembatas ialah rentetan, dan setiap aksara di dalamnya dianggap sebagai pembatas. Contoh:
Kod | Output konsol |
---|---|
|
|
"Perhatikan bahawa setiap aksara dalam rentetan yang diluluskan dalam rentetan kedua kepada StringTokenizer
pembina dianggap sebagai pemisah.
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 untuk program sedemikian akan kelihatan seperti ini:
Kod program |
---|
|
"Anda akan bersetuju dengan saya bahawa kod itu tidak begitu mudah dibaca. Dan jika nama pembolehubah lebih panjang, maka kod itu akan menjadi lebih sukar:
Kod program |
---|
|
"Ya, ia sukar dibaca!"
"Jangan risau. 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
" String
Kelas mempunyai kaedah statik format()
: 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 |
---|---|
|
|
|
|
|
|
" format()
Parameter pertama kaedah 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.
" format()
Kaedah menggantikan penentu ini %s
dan %d
format dengan parameter yang mengikuti 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 |
"Penentukan ini menunjukkan jenis data, tetapi terdapat juga penentu yang menunjukkan susunan data. Untuk mendapatkan hujah mengikut nombornya (penomboran bermula dari satu), anda perlu menulis " % 1$ d " dan bukannya " %d ". Contoh:
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
Kolam Rentetan
"Setiap rentetan yang dinyatakan dalam kod sebagai literal rentetan disimpan dalam kawasan memori yang dipanggil semasa StringPool
program 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 begitulah cara ia berfungsi. Apabila kod kelas anda dimuatkan oleh mesin Java, semua literal rentetan ditambahkan pada jika ia belum ada. Jika StringPool
ia sudah ada, maka kita hanya menggunakan rujukan rentetan daripada StringPool
.
Sehubungan itu, jika anda menetapkan literal yang sama kepada beberapa pembolehubah String 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 StringPoll |
---|---|
|
|
"Itulah sebabnya pembolehubah a
dan b
akan menyimpan rujukan yang sama."
“Saya harap saya faham semuanya dengan betul.
intern()
kaedah.
"Dan bahagian yang terbaik ialah anda boleh menambah sebarang rentetan secara pemrograman pada StringPool
. Untuk melakukan ini, anda hanya perlu memanggil kaedah String
pembolehubah intern()
.
" intern()
Kaedah ini akan menambah rentetan kepada StringPool
jika ia belum ada, dan akan mengembalikan rujukan kepada rentetan dalam fail StringPool
.
"Dan apakah yang akan berlaku jika dua rentetan yang sama ditambah kepada kaedah StringPool
menggunakan intern()
?"
"Kaedah ini akan mengembalikan rujukan yang sama. Ini boleh digunakan untuk membandingkan rentetan melalui rujukan. Contoh:
Kod | Catatan |
---|---|
|
|
|
|
Anda tidak mungkin menggunakan kaedah ini dengan kerap. Yang berkata, orang suka bertanya mengenainya dalam temu duga kerja.
"Jadi, lebih baik mengetahuinya daripada tidak tahu. Terima kasih, Ellie!"