Előadásrészlet egy mentorral a Codegym University tanfolyam részeként. Jelentkezzen a teljes tanfolyamra.
"Szia, Amigo! Ma néhány gyakoribb forgatókönyvet fogunk elemezni a húrokkal való munkavégzéssel kapcsolatban. Tudod például, hogyan lehet egy karakterláncot több részre osztani?"
– Nem mondom el azonnal, Ellie. De te elmondod, igaz?
split()
módszer
"Ennek többféle módja van. A karakterlánc több részre bontásának első módja a split()
metódus használata. Egy speciális elválasztó karakterláncot definiáló reguláris kifejezést paraméterként kell átadni. Megtanulja, hogy mi a reguláris kifejezés a a Java Collections küldetés.
Példa:
Kód | Eredmény |
---|---|
|
Az eredmény egy három karakterláncból álló tömb lesz:
|
Egyszerű, de néha túlzó ez a megközelítés. Ha sok határoló van (például szóközök, újsor karakterek, tabulátorok, pontok), akkor egy meglehetősen összetett reguláris kifejezést kell alkotnia."
"Nos, persze. És ha nehéz olvasni, akkor nehéz változtatni.
StringTokenizer
osztály
Előadásrészlet egy mentorral a Codegym University tanfolyam részeként. Jelentkezzen a teljes tanfolyamra.
"A Java-nak van egy speciális osztálya, amelynek teljes feladata egy karakterlánc részkarakterláncokra osztása.
"Ez az osztály nem használ reguláris kifejezéseket: ehelyett egyszerűen át kell adni egy határoló karakterláncot. Ennek a megközelítésnek az az előnye, hogy nem bontja fel egyszerre a teljes karakterláncot, hanem az elejétől a végéig halad lépésenként.
Az osztálynak van egy konstruktora és két metódusa. Átadunk a konstruktornak egy karakterláncot, amelyet részekre bontunk, és egy karakterláncot, amely határoló karakterekből áll.
Mód | Leírás |
---|---|
|
A következő részkarakterláncot adja vissza |
|
Ellenőrzi, hogy van-e több részkarakterlánc. |
"Ez az osztály valahogy a Scanner osztályra emlékeztet, amelynek szintén vannak nextLine()
metódusai hashNextLine()
.
"Jó észrevételt tett. StringTokenizer
Ezzel a paranccsal hozhat létre objektumot:
StringTokenizer name = new StringTokenizer(string, delimiters);
Ahol a string a részekre osztandó karakterlánc. A határolók pedig egy karakterlánc, és minden benne lévő karaktert határolóként kezelünk. Példa:
Kód | Konzol kimenet |
---|---|
|
|
"Ne feledje, hogy a második karakterláncban a StringTokenizer
konstruktornak átadott karakterlánc minden karaktere elválasztónak számít.
String.format()
módszer és StringFormatter
osztály
"A String osztály másik érdekes módszere a format()
.
"Tegyük fel, hogy különféle változók tárolják az adatokat. Hogyan jelenítheti meg őket egy sorban a képernyőn? Például van néhány adatunk (bal oszlop) és a kívánt kimenet (jobb oszlop):
Kód | Konzol kimenet |
---|---|
|
|
Egy ilyen program kódja így fog kinézni:
Programkód |
---|
|
"Egyetértesz velem abban, hogy a kód nem nagyon olvasható. És ha a változónevek hosszabbak lennének, akkor a kód még nehezebbé válna:
Programkód |
---|
|
– Igen, nehéz olvasmány!
"Ne aggódjon. Ez gyakori helyzet a valós programokban, ezért szeretném elmondani, hogyan írhatja meg ezt a kódot egyszerűbben és tömörebben.
String.format
"Az String
osztálynak van egy statikus format()
metódusa: lehetővé teszi egy minta megadását egy karakterlánc adatokkal való összeállításához. A parancs általános megjelenése a következő:
String name = String.format(pattern, parameters);
Példa:
Kód | Eredmény |
---|---|
|
|
|
|
|
|
"A format()
metódus első paramétere egy formátumkarakterlánc, amely tartalmazza az összes kívánt szöveget a speciális karakterekkel, úgynevezett formátum-specifikátorokkal (például %d
és %s
) azokon a helyeken, ahol adatokat kell beszúrni.
"A format()
metódus ezeket %s
és %d
a formátummeghatározókat azokra a paraméterekre cseréli, amelyek a paraméterlistában a formátum karakterláncot követik. Ha karakterláncot akarunk beszúrni, akkor azt írjuk, hogy . %s
Ha számot akarunk beszúrni, akkor a formátummeghatározó: %d
. Példa:
Kód | Eredmény |
---|---|
|
s egyenlő"a=1, b=4, c=3" |
"Íme a formátum-karakterláncon belül használható formátumspecifikátorok rövid listája:
Meghatározó | Jelentése |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
valós szám: float ,double |
|
boolean |
|
char |
|
Date |
|
% karakter |
"Ezek a specifikációk jelzik az adatok típusát, de vannak olyan specifikátorok is, amelyek az adatok sorrendjét jelzik. Ahhoz, hogy a szám alapján argumentumot kapjunk (a számozás egytől kezdődik), a " % 1$ d " karakterláncot kell beírni a " %d ". Példa:
Kód | Eredmény |
---|---|
|
s egyenlő"a=13, b=12, c=11" |
%3$d
megkapja a 3. argumentumot, %2$d
megkapja a második argumentumot, és %d
megkapja a legelső argumentumot. A %s
és %d
formátumspecifikátorok argumentumokra hivatkoznak, függetlenül az olyan specifikációktól, mint %3$d
a vagy%2$s
String Pool
StringPool
"Minden, a kódban karakterlánc-literálként megadott karakterlánc a program futása közben egy memóriaterületen tárolódik . StringPool
Ez egy speciális tömb a karakterláncok tárolására. Célja a karakterláncok tárolásának optimalizálása:
"Először is a kódban megadott karakterláncokat kell tárolni valahol, ugye? A kód parancsokból áll, de az adatokat (főleg a nagy karakterláncokat) a kódtól elkülönítve kell tárolni a memóriában. A kódban csak a string objektumokra való hivatkozások jelennek meg.
"Másodszor, minden azonos karakterlánc-literált csak egyszer kell eltárolni a memóriában. És ez pontosan így működik. Amikor a Java gép betölti az osztálykódot, az összes karakterlánc-literált hozzáadja a szöveghez, ha még nincs ott. Ha StringPool
vannak már ott van, akkor egyszerűen használunk egy karakterlánc hivatkozást a StringPool
.
Ennek megfelelően, ha ugyanazt a literált rendeli hozzá több karakterlánc-változóhoz a kódban, akkor ezek a változók ugyanazt a hivatkozást fogják tartalmazni. A literál csak egyszer lesz hozzáadva StringPool
. Minden más esetben a kód hivatkozást kap a már betöltött karakterláncra StringPool
.
Nagyjából a következőképpen működik:
Kód | StringPoll használata |
---|---|
|
|
"Ezért a a
és b
a változók ugyanazokat a hivatkozásokat tárolják."
„Remélem, mindent jól értettem.
intern()
módszer.
"És a legjobb az egészben az, hogy programozottan bármilyen karakterláncot hozzáadhat a StringPool
. Ehhez csak meg kell hívnia a String
változó intern()
metódusát.
"A intern()
metódus hozzáadja a karakterláncot a karakterlánchoz StringPool
, ha még nincs ott, és visszaadja a hivatkozást a karakterláncra a StringPool
.
"És mi történik, ha két azonos karakterláncot adunk a StringPool
metódushoz intern()
?"
"A metódus ugyanazokat a hivatkozásokat adja vissza. Ezzel a karakterláncokat referencia alapján lehet összehasonlítani. Példa:
Kód | jegyzet |
---|---|
|
|
|
|
Nem valószínű, hogy gyakran használja ezt a módszert. Ennek ellenére az emberek szeretnek erről kérdezni az állásinterjúkon.
– Szóval, jobb tudni róla, mint nem tudni. Köszönöm, Ellie!
GO TO FULL VERSION