1. StringTokenizer
osztály
És most néhány gyakoribb forgatókönyv a karakterláncokkal való munka során. Hogyan lehet egy karakterláncot több részre osztani? Ennek többféle módja van.
split()
módszer
A karakterlánc több részre való felosztásának első módja a módszer használata split()
. Egy speciális határoló karakterláncot definiáló reguláris kifejezést argumentumként kell átadni. A Java Multithreading küldetésben megtudhatja, mi az a reguláris kifejezé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 összeállítani. Nehezen olvasható, ezért nehéz módosítani.
StringTokenizer
osztály
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 adnia egy elválasztó karakterláncot. Ennek a megközelítésnek az az előnye, hogy nem töri egyszerre darabokra a teljes húrt, hanem lépésenként halad elejétől a végéig.
Az osztálynak van egy konstruktora és két fontos 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, aminek szintén nextLine()
és hasNextLine()
metódusai vannak.
StringTokenizer
Ezzel a paranccsal hozhat létre objektumot:
StringTokenizer name = new StringTokenizer(string, delimiters);
Hol string
van a részekre osztandó karakterlánc. Az And delimiters
egy karakterlánc, és minden benne lévő karaktert határolóként kezelünk. Példa:
Kód | Konzol kimenet |
---|---|
|
|
Vegye figyelembe, hogy a karakterlánc minden egyes karaktere, amelyet második karakterláncként ad át a konstruktornak, StringTokenizer
elválasztónak számít.
2. 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 lehet őket egy sorban megjeleníteni a képernyőn? Például van néhány adatunk (bal oldali oszlop) és a kívánt kimenet (jobb oszlop):
Kód | Konzol kimenet |
---|---|
|
|
A kódja valószínűleg így fog kinézni:
Program kód |
---|
|
Az ilyen kód nem nagyon olvasható. És ha a változónevek hosszabbak lennének, akkor a kód még nehezebbé válik:
Program kód |
---|
|
Nem túl olvasható, igaz?
De ez gyakori helyzet a valós programokban, ezért szeretnék elmondani egy módot, amellyel egyszerűbben és tömörebben írhatjuk ezt a kódot.
String.format
A 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, valamint a formátum-specifikátoroknak nevezett speciális karaktereket (például %d
és %s
) azokon a helyeken, ahol adatokat kell beszúrni.
A format()
metódus ezeket %s
és %d
a formátumspecifikációkat lecseréli azokra a paraméterekre, amelyek a paraméterlistában szereplő formátum karakterláncot követik. Ha egy karakterláncot akarunk beszúrni, akkor azt írjuk %s
. Ha számot szeretnénk beszúrni, akkor a formátummeghatározó a %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ációk is, amelyek az adatok sorrendjét jelzik. Ha a szám alapján szeretne argumentumot kapni (a számozás 1-től kezdődik), a " " helyett a " " karaktert kell írnia . Példa:%1$d
%d
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
3. String Pool
StringPool
A program futása közben a kódban karakterlánc-literálként megadott összes karakterlánc a memória egy területén van tárolva . StringPool
egy speciális tömb 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 el kell tárolni valahol, nem? A kód parancsokból áll, de az adatokat (különösen a nagy karakterláncokat) a kódtól elkülönítve kell a memóriában tárolni. Csak a karakterlánc objektumokra való hivatkozások jelennek meg a kódban.
Másodszor, minden azonos karakterlánc-literált csak egyszer kell a memóriában tárolni. És ez csak így működik. Amikor az osztálykódot betölti a Java gép, az összes karakterlánc-literál hozzáadódik a kódhoz, StringPool
ha még nincs ott. Ha már ott vannak, akkor egyszerűen használjunk egy karakterlánc hivatkozást a StringPool
.
Ennek megfelelően, ha ugyanazt a literált rendeli hozzá több String
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 | A StringPool használata |
---|---|
|
|
Ezért a a
és b
változók ugyanazokat a hivatkozásokat tárolják.
intern()
módszer
És a legjobb az egészben az, hogy bármilyen karakterláncot programozottan hozzáadhat a StringPool
. Ehhez csak meg kell hívni 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
.
Ha két azonos karakterláncot adunk a metódushoz StringPool
, intern()
akkor a metódus ugyanazt a hivatkozást adja vissza. Ez felhasználható a karakterláncok hivatkozással történő összehasonlítására. Példa:
Kód | jegyzet |
---|---|
|
|
|
|
Nem valószínű, hogy gyakran használja ezt a módszert, de az emberek szívesen kérdeznek róla az interjúk során . Tehát jobb tudni róla, mint nem tudni.
GO TO FULL VERSION