1. StringTokenizerkelas

Lan saiki sawetara skenario sing luwih umum nglibatake nggarap senar. Kepiye carane sampeyan pamisah senar dadi sawetara bagean? Ana sawetara cara kanggo nindakake iki.

split()cara

Cara pisanan kanggo pamisah string dadi pirang-pirang bagean yaiku nggunakake split()metode kasebut. Ekspresi reguler sing nemtokake string pembatas khusus kudu diterusake minangka argumen. Sampeyan bakal sinau apa ekspresi reguler ing nggoleki Java Multithreading .

Tuladha:

Kode asil
String str = "Good news everyone!";
String[] strings = str.split("ne");
System.out.println(Arrays.toString(strings));
Asil bakal dadi array saka telung senar:
["Good ", "ws everyo", "!"]

Prasaja, nanging kadhangkala pendekatan iki kakehan. Yen ana akeh pembatas (contone, spasi, karakter baris anyar, tab, titik), sampeyan kudu mbangun ekspresi reguler sing rada rumit. Iku angel diwaca lan mulane angel diowahi.

StringTokenizerkelas

Jawa nduweni kelas khusus sing kabeh tugas kanggo pamisah string menyang substrings.

Kelas iki ora nggunakake ekspresi reguler: tinimbang, sampeyan mung ngliwati string sing kalebu pembatas. Kauntungan saka pendekatan iki yaiku ora ngrusak kabeh senar bebarengan, nanging gerakane saka wiwitan nganti pungkasan siji-sijine.

Kelas kasebut nduweni konstruktor lan rong cara penting. We pass konstruktor senar sing dipérang dadi bagéan, lan senar dumadi saka pesawat saka karakter delimiting.

Metode Katrangan
String nextToken()
Ngasilake substring sabanjure
boolean hasMoreTokens()
Priksa manawa ana luwih akeh substrings.

Kelas iki piye wae kaya kelas Scanner, kang uga wis nextLine()lan hasNextLine()cara.

Sampeyan bisa nggawe StringTokenizerobyek kanthi printah iki:

StringTokenizer name = new StringTokenizer(string, delimiters);

Where stringsenar kanggo dibagi dadi bagean. Lan delimitersminangka senar, lan saben karakter kasebut dianggep minangka delimiter. Tuladha:

Kode Output 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
!

Elinga yen saben karakter ing senar liwati minangka senar kapindho kanggo StringTokenizerkonstruktor dianggep minangka separator.



2. String.format()cara lan StringFormatterkelas

Cara liyane sing menarik saka kelas String yaiku format().

Contone, sampeyan duwe macem-macem variabel sing nyimpen data. Kepiye carane sampeyan nampilake ing layar ing siji baris? Contone, kita duwe sawetara data (kolom kiwa) lan output sing dikarepake (kolom tengen):

Kode Output 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 sampeyan bakal katon kaya iki:

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.}");

Kode kuwi ora banget diwaca. Lan yen jeneng variabel luwih dawa, kode kasebut bakal dadi luwih angel:

Kode program

class User {
    ......
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getFriends() {
        return friends;
    }

    public ExtraInformation getExtraInformation() {
        return extraInformation;
    }
}

User user = new User();

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

Ora bisa diwaca, ta?

Nanging iki kahanan umum ing program donya nyata, supaya aku arep kanggo pitutur marang kowe bab cara kanggo nulis kode iki luwih gampang lan concisely.

String.format

Kelas String nduweni format()cara statis: ngidini sampeyan nemtokake pola kanggo ngrakit string karo data. Tampilan umum perintah kasebut yaiku:

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

Tuladha:

Kode asil
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

Parameter pisanan metode format()yaiku senar format sing ngemot kabeh teks sing dikarepake bebarengan karo karakter khusus sing diarani penentu format (kayata %dlan %s) ing panggonan sing sampeyan kudu nglebokake data.

Cara format()ngganti iki %slan %dformat specifiers karo paramèter sing tindakake format string ing dhaftar parameter. Yen kita pengin nglebokake senar, banjur kita nulis %s. Yen kita pengin nglebokake nomer, penentu format yaiku %d. Tuladha:

Kode asil
String s = String.format("a=%d, b=%d, c=%d", 1, 4, 3);
siku padha karo"a=1, b=4, c=3"

Ing ngisor iki minangka dhaptar singkat saka penentu format sing bisa digunakake ing string format:

Specifier Artine
%s
String
%d
interger : byte,,,, short_intlong
%f
nomer nyata float:,double
%b
boolean
%c
char
%t
Date
%%
%watak

Penentu iki nuduhake jinis data, nanging ana uga penentu sing nuduhake urutan data. Kanggo njaluk argumentasi kanthi nomer (nomer diwiwiti saka siji), sampeyan kudu nulis " " tinimbang " ". Tuladha:%1$d%d

Kode asil
String s = String.format("a=%3$d, b=%2$d, c=%d", 11, 12, 13);
siku padha karo"a=13, b=12, c=11"

%3$dbakal entuk argumen kaping 3, %2$dbakal entuk argumen kaping pindho, lan %dbakal entuk argumen sing pertama. The %slan %dformat specifiers nuduhake bantahan preduli saka specifiers kaya %3$dutawa%2$s



3. Kolam Renang

Saben string sing ditemtokake ing kode minangka string literal disimpen ing area memori sing diarani nalika StringPoolprogram lagi mlaku. StringPoolminangka susunan khusus kanggo nyimpen senar. Tujuane kanggo ngoptimalake panyimpenan string:

Pisanan, senar sing ditemtokake ing kode kudu disimpen ing endi wae, ta? Kode kasusun saka printah, nanging data (utamané, strings gedhe) kudu disimpen ing memori kanthi kapisah saka kode. Mung referensi kanggo obyek senar katon ing kode.

Kapindho, kabeh literal string sing padha kudu disimpen ing memori mung sapisan. Lan iku mung cara kerjane. Nalika kode kelas sampeyan dimuat dening mesin Java, kabeh string literals ditambahake menyang StringPoolyen durung ana. Yen wis ana, mula kita mung nggunakake referensi senar saka StringPool.

Dadi, yen sampeyan nemtokake literal sing padha menyang sawetara Stringvariabel ing kode sampeyan, mula variabel kasebut bakal ngemot referensi sing padha. A literal bakal ditambahake StringPoolmung sapisan. Ing kabeh kasus liyane, kode bakal entuk referensi kanggo senar sing wis dimuat ing file StringPool.

Mangkene kira-kira cara kerjane:

Kode Nggarap StringPool
String a = "Hello";
String b = "Hello";
String c = "Bye";
String[] pool = {"Hello", "Bye"};
a = pool[0];
b = pool[0];
c = pool[1];

Mulane variabel alan bbakal nyimpen referensi sing padha.

intern()cara

Lan sing paling apik yaiku sampeyan bisa nambah senar kanthi program menyang file StringPool. Kanggo nindakake iki, sampeyan mung kudu nelpon metode Stringvariabel intern().

Cara intern()bakal nambah senar kanggo StringPoolyen durung ana, lan bakal bali referensi kanggo senar ing StringPool.

Yen loro strings podho rupo ditambahake kanggo StringPoolnggunakake intern()cara, cara ngasilake referensi padha. Iki bisa digunakake kanggo mbandhingake senar kanthi referensi. Tuladha:

Kode Cathetan
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

Sampeyan ora kerep nggunakake cara iki, nanging wong seneng takon babagan iki ing wawancara . Dadi luwih becik ngerti babagan iki tinimbang ora ngerti.