Et foredragsuddrag med en mentor som en del af Codegym University-kurset. Tilmeld dig hele kurset.
"Hej, Amigo! I dag vil vi analysere et par mere almindelige scenarier, der involverer arbejde med strenge. Ved du for eksempel, hvordan man opdeler en streng i flere dele?"
"Jeg vil ikke fortælle dig det med det samme, Ellie. Men du vil fortælle mig det, vel?"
split()
metode
"Der er flere måder at gøre dette på. Den første måde at opdele en streng i flere dele er at bruge metoden split()
. Et regulært udtryk, der definerer en særlig afgrænsende streng, skal videregives som en parameter. Du vil lære, hvad et regulært udtryk er i Java Collections- opgaven.
Eksempel:
Kode | Resultat |
---|---|
|
Resultatet vil være en række af tre strenge:
|
Enkel, men nogle gange er denne tilgang overdreven. Hvis der er mange afgrænsningstegn (f.eks. mellemrum, nylinjetegn, tabulatorer, punktum), så skal du konstruere et ret komplekst regulært udtryk."
"Jamen, selvfølgelig. Og hvis det er svært at læse, så er det svært at lave ændringer.
StringTokenizer
klasse
Et foredragsuddrag med en mentor som en del af Codegym University-kurset. Tilmeld dig hele kurset.
"Java har en speciel klasse, hvis hele opgave er at opdele en streng i understrenge.
"Denne klasse bruger ikke regulære udtryk: I stedet sender du blot en streng, der består af afgrænsningstegn. Fordelen ved denne fremgangsmåde er, at den ikke brækker hele strengen i stykker på én gang, men i stedet flytter fra start til slut. skridt ad gangen.
Klassen har en konstruktør og to metoder. Vi sender konstruktøren en streng, som vi opdeler i dele, og en streng bestående af et sæt afgrænsende tegn.
Metoder | Beskrivelse |
---|---|
|
Returnerer den næste understreng |
|
Tjekker om der er flere understrenge. |
"Denne klasse minder mig på en eller anden måde om Scanner-klassen, som også har nextLine()
og hashNextLine()
metoder.
"Det er en god observation, du har lavet. Du kan oprette et StringTokenizer
objekt med denne kommando:
StringTokenizer name = new StringTokenizer(string, delimiters);
Hvor streng er strengen, der skal opdeles i dele. Og afgrænsningstegn er en streng, og hvert tegn i den behandles som et skilletegn. Eksempel:
Kode | Konsoludgang |
---|---|
|
|
"Bemærk, at hvert tegn i strengen, der sendes i den anden streng til StringTokenizer
konstruktøren, betragtes som en separator.
String.format()
metode og StringFormatter
klasse
"En anden interessant metode i String-klassen er format()
.
"Lad os sige, at du har forskellige variabler, der lagrer data. Hvordan viser du dem på skærmen på én linje? For eksempel har vi nogle data (venstre kolonne) og ønsket output (højre kolonne):
Kode | Konsoludgang |
---|---|
|
|
Koden til et sådant program vil se nogenlunde sådan ud:
Program kode |
---|
|
"Du er enig med mig i, at koden ikke er særlig læsbar. Og hvis variabelnavnene var længere, ville koden blive endnu sværere:
Program kode |
---|
|
"Ja, det er hård læsning!"
"Bare rolig. Dette er en almindelig situation i programmer i den virkelige verden, så jeg vil gerne fortælle dig om en måde at skrive denne kode mere enkelt og mere kortfattet på.
String.format
" String
Klassen har en statisk format()
metode: den lader dig specificere et mønster til at samle en streng med data. Det generelle udseende af kommandoen er som følger:
String name = String.format(pattern, parameters);
Eksempel:
Kode | Resultat |
---|---|
|
|
|
|
|
|
" format()
Metodens første parameter er en formatstreng, der indeholder al den ønskede tekst sammen med specialtegn kaldet formatspecificatorer (såsom %d
og %s
) på de steder, hvor du skal indsætte data.
" format()
Metoden erstatter disse %s
og %d
formatspecifikationer med de parametre, der følger efter formatstrengen i parameterlisten. Hvis vi vil indsætte en streng, så skriver vi . %s
Hvis vi vil indsætte et tal, så er formatspecifikationen %d
. Eksempel:
Kode | Resultat |
---|---|
|
s er lig med"a=1, b=4, c=3" |
"Her er en kort liste over formatspecifikationer, der kan bruges inde i formatstrengen:
Specifikator | Betyder |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
reelle tal: float ,double |
|
boolean |
|
char |
|
Date |
|
% Karakter |
"Disse specifikationer angiver typen af data, men der er også specifikationer, der angiver rækkefølgen af dataene. For at få et argument ved dets nummer (nummereringen starter fra et), skal du skrive " % 1$ d " i stedet for " %d ". Eksempel:
Kode | Resultat |
---|---|
|
s er lig med"a=13, b=12, c=11" |
%3$d
får det 3. argument, %2$d
får det andet argument og %d
får det allerførste argument. Angivelserne %s
og %d
formatet refererer til argumenter uanset specifikationer som %3$d
eller%2$s
String Pool
"Hver streng angivet i kode som en streng-literal er gemt i et hukommelsesområde kaldet mens StringPool
programmet kører. StringPool
er en speciel matrix til lagring af strenge. Dens formål er at optimere strenglagring:
"For det første skal de strenge, der er angivet i kode, gemmes et sted, ikke? Kode består af kommandoer, men data (især store strenge) skal lagres i hukommelsen adskilt fra koden. Kun referencer til strengobjekter vises i kode.
"For det andet skal alle identiske strengliteraler kun gemmes i hukommelsen én gang. Og det er bare sådan, det virker. Når din klassekode indlæses af Java-maskinen, føjes alle strengliteraler til, hvis de ikke allerede er der. Hvis de StringPool
er allerede der, så bruger vi blot en strengreference fra StringPool
.
Derfor, hvis du tildeler den samme literal til flere strengvariabler i din kode, vil disse variable indeholde den samme reference. En bogstavelig vil blive tilføjet til den StringPool
kun én gang. I alle andre tilfælde vil koden få en reference til den streng, der allerede er indlæst i StringPool
.
Sådan fungerer det nogenlunde:
Kode | Arbejder med StringPoll |
---|---|
|
|
"Det er derfor, variablerne a
og b
vil gemme de samme referencer."
"Jeg håber, jeg har forstået det hele rigtigt.
intern()
metode.
"Og det bedste er, at du programmæssigt kan tilføje en hvilken som helst streng til StringPool
. For at gøre dette skal du blot kalde variablens String
metode intern()
.
" intern()
Metoden tilføjer strengen til, StringPool
hvis den ikke allerede er der, og returnerer en reference til strengen i StringPool
.
"Og hvad vil der ske, hvis to identiske strenge tilføjes til at StringPool
bruge intern()
metoden?"
"Metoden returnerer de samme referencer. Dette kan bruges til at sammenligne strenge ved reference. Eksempel:
Kode | Bemærk |
---|---|
|
|
|
|
Det er usandsynligt, at du bruger denne metode ofte. Når det er sagt, kan folk godt lide at spørge om det i jobsamtaler.
"Så, det er bedre at vide om det end ikke at vide det. Tak, Ellie!"