Cuplikan kuliah dengan seorang mentor sebagai bagian dari kursus Codegym University. Mendaftar untuk kursus penuh.


"Hai, Amigo! Hari ini kita akan menganalisis beberapa skenario umum yang melibatkan bekerja dengan string. Misalnya, apakah Anda tahu cara membagi string menjadi beberapa bagian?"

"Aku tidak akan langsung memberitahumu, Ellie. Tapi kamu akan memberitahuku, kan?"

split()metode

"Ada beberapa cara untuk melakukannya. Cara pertama untuk memisahkan string menjadi beberapa bagian adalah dengan menggunakan metode split(). Ekspresi reguler yang mendefinisikan string pembatas khusus harus diteruskan sebagai parameter. Anda akan mempelajari apa itu ekspresi reguler pencarian Koleksi Java .

Contoh:

Kode Hasil
String str = "Good news everyone!";
String[] strings = str.split("ne");
System.out.println(Arrays.toString(strings));
Hasilnya akan menjadi array dari tiga string:
["Good ", "ws everyo", "!"]

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."

"Yah, tentu. Dan jika sulit dibaca, maka sulit pula untuk melakukan perubahan.

StringTokenizerkelas

Cuplikan kuliah dengan seorang mentor sebagai bagian dari kursus Codegym University. Mendaftar untuk kursus penuh.


"Java memiliki kelas khusus yang tugasnya adalah membagi string menjadi substring.

"Kelas ini tidak menggunakan ekspresi reguler: sebagai gantinya, Anda cukup mengirimkan string yang terdiri dari pembatas. Keuntungan dari pendekatan ini adalah tidak memecah seluruh string menjadi potongan-potongan sekaligus, tetapi bergerak dari awal ke akhir satu selangkah demi selangkah.

Kelas memiliki konstruktor dan dua metode. Kami meneruskan konstruktor string yang kami pisahkan menjadi beberapa bagian, dan string yang terdiri dari sekumpulan karakter pembatas.

Metode Keterangan
String nextToken()
Mengembalikan substring berikutnya
boolean hasMoreTokens()
Memeriksa apakah ada lebih banyak substring.

"Kelas ini entah bagaimana mengingatkan saya pada kelas Pemindai, yang juga memiliki nextLine()dan hashNextLine()metode.

"Itu pengamatan bagus yang telah Anda buat. Anda dapat membuat StringTokenizerobjek dengan perintah ini:

StringTokenizer name = new StringTokenizer(string, delimiters);

Dimana string adalah string yang akan dibagi menjadi beberapa bagian. Dan pembatas adalah sebuah string, dan setiap karakter di dalamnya diperlakukan sebagai pembatas. Contoh:

Kode Keluaran konsol
String str = "Good news everyone!";

StringTokenizer tokenizer = new StringTokenizer(str,"ne");
while (tokenizer.hasMoreTokens())
{
   String token = tokenizer.nextToken();
   System.out.println(token);
}
Good 
ws 
v
ryo
!

"Perhatikan bahwa setiap karakter dalam string yang diteruskan dalam string kedua ke StringTokenizerkonstruktor dianggap sebagai pemisah.

String.format()metode dan StringFormatterkelas

"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 output yang diinginkan (kolom kanan):

Kode Keluaran konsol
String name = "Amigo";
int age = 12;
String friend = "Diego";
int weight = 200;
User = {name: Amigo, age: 12 years, friend: Diego, weight: 200 kg.}

Kode untuk program semacam itu akan terlihat seperti ini:

Kode program
String name = "Amigo";
int age = 12;
String friend = "Diego";
int weight = 200;

System.out.println("User = {name: " + name + ", age:" + age + " years, friend: " + friend+", weight: " + weight + " kg.}");

"Anda akan setuju dengan saya bahwa kodenya tidak mudah dibaca. Dan jika nama variabelnya lebih panjang, maka kodenya akan menjadi lebih sulit:

Kode program
String name = "Amigo";
int age = 12;
String friend = "Diego";
int weight = 200;

System.out.println("User = {name: " + user.getName() + ", age:" + user.getAge() + " years, friend: " + user.getFriends().get(0) + ", weight: " + user.getExtraInformation().getWeight() + " kg.}");

"Ya, itu sulit dibaca!"

"Jangan khawatir. 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

" StringKelas memiliki metode statis format(): memungkinkan Anda menentukan pola untuk menyusun string dengan data. Tampilan umum dari perintah adalah sebagai berikut:

String name = String.format(pattern, parameters);

Contoh:

Kode Hasil
String.format("Age=%d, Name=%s", age, name);
Age=12, Name=Amigo
String.format("Width=%d, Height=%d", width, height);
Width=20, Height=10
String.format("Fullname=%s", name);
Fullname=Diego

" format()Parameter pertama metode ini adalah string format yang berisi semua teks yang diinginkan bersama dengan karakter khusus yang disebut penentu format (seperti %ddan %s) di tempat Anda perlu memasukkan data.

" format()Metode menggantikan ini %sdan %dpenentu format dengan parameter yang mengikuti string format dalam daftar parameter. Jika kita ingin memasukkan string, maka kita menulis . %sJika kita ingin memasukkan angka, maka penentu formatnya adalah %d. Contoh:

Kode Hasil
String s = String.format("a=%d, b=%d, c=%d", 1, 4, 3);
sadalah sama dengan"a=1, b=4, c=3"

Berikut adalah daftar singkat penentu format yang dapat digunakan di dalam string format:

Penentu Arti
%s
String
%d
interger: byte, short, int,long
%f
bilangan asli: float,double
%b
boolean
%c
char
%t
Date
%%
%karakter

"Penentu ini menunjukkan jenis data, tetapi ada juga penspesifikasi yang menunjukkan urutan data. Untuk mendapatkan argumen berdasarkan nomornya (penomoran dimulai dari satu), Anda perlu menulis " % 1$ d " alih - alih " %d ". Contoh:

Kode Hasil
String s = String.format("a=%3$d, b=%2$d, c=%d", 11, 12, 13);
sadalah sama dengan"a=13, b=12, c=11"

%3$dakan mendapatkan argumen ke-3, %2$dakan mendapatkan argumen kedua, dan %dakan mendapatkan argumen pertama. Penspesifikasi format %sdan %dmengacu pada argumen terlepas dari penspesifikasi seperti %3$datau%2$s

Kolam Tali

"Setiap string yang ditentukan dalam kode sebagai string literal disimpan di area memori yang disebut saat StringPoolprogram sedang berjalan. StringPoolIni adalah larik 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 identik harus disimpan dalam memori hanya sekali. Dan begitulah cara kerjanya. Saat kode kelas Anda dimuat oleh mesin Java, semua literal string ditambahkan ke jika belum ada. Jika sudah StringPoolada sudah ada, maka kita cukup menggunakan referensi string dari StringPool.

Dengan demikian, jika Anda menetapkan literal yang sama ke beberapa variabel String dalam kode Anda, maka variabel ini akan berisi referensi yang sama. Sebuah literal akan ditambahkan StringPoolhanya 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 StringPoll
String a = "Hello";
String b = "Hello";
String c = "Bye";
String[] pool = {"Hello", "Bye"};
a = pool[0];
b = pool[0];
c = pool[1];

"Itulah sebabnya adan bvariabel akan menyimpan referensi yang sama."

"Saya harap saya memahami semuanya dengan benar.

intern()metode.

"Dan bagian terbaiknya adalah Anda dapat secara terprogram menambahkan string apa pun ke StringPool. Untuk melakukan ini, Anda hanya perlu memanggil metode Stringvariabel intern().

" intern()Metode ini akan menambahkan string ke StringPooljika belum ada, dan akan mengembalikan referensi ke string di file StringPool.

"Dan apa yang akan terjadi jika dua string identik ditambahkan ke dalam metode StringPoolusing intern()?"

"Metode ini akan mengembalikan referensi yang sama. Ini dapat digunakan untuk membandingkan string dengan referensi. Contoh:

Kode Catatan
String a = new String("Hello");
String b = new String("Hello");
System.out.println(a == b);


false
String a = new String("Hello");
String b = new String("Hello");

String t1 = a.intern();
String t2 = b.intern();
System.out.println(a == b);
System.out.println(t1 == t2);





false
true

Anda tidak mungkin sering menggunakan metode ini. Konon, orang suka menanyakannya dalam wawancara kerja.

"Jadi, lebih baik mengetahuinya daripada tidak mengetahuinya. Terima kasih, Ellie!"