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.
StringTokenizerosztá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. StringTokenizerEzzel 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 StringTokenizerkonstruktornak átadott karakterlánc minden karaktere elválasztónak számít.
String.format()módszer és StringFormatterosztá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 Stringosztá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 %da 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 . %sHa számot akarunk beszúrni, akkor a formátummeghatározó: %d. Példa:
| Kód | Eredmény |
|---|---|
|
segyenlő"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 |
|---|---|
|
segyenlő"a=13, b=12, c=11" |
%3$dmegkapja a 3. argumentumot, %2$dmegkapja a második argumentumot, és %dmegkapja a legelső argumentumot. A %sés %dformátumspecifikátorok argumentumokra hivatkoznak, függetlenül az olyan specifikációktól, mint %3$da 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 . StringPoolEz 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 StringPoolvannak 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 ba 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 Stringvá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 StringPoolmetó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