Een fragment uit een lezing met een mentor als onderdeel van de Codegym University-cursus. Schrijf je in voor de volledige cursus.
"Hallo, Amigo! Vandaag gaan we een paar veelvoorkomende scenario's analyseren die te maken hebben met het werken met strings. Weet jij bijvoorbeeld hoe je een string in verschillende delen splitst?"
'Ik ga het je niet meteen vertellen, Ellie. Maar jij gaat het mij wel vertellen, toch?'
split()
methode
"Er zijn verschillende manieren om dit te doen. De eerste manier om een string in meerdere delen te splitsen is door de split()
methode te gebruiken. Een reguliere expressie die een speciale begrenzende string definieert, moet als parameter worden doorgegeven. Je leert wat een reguliere expressie is in de Java Collections- zoektocht.
Voorbeeld:
Code | Resultaat |
---|---|
|
Het resultaat is een array van drie strings:
|
Eenvoudig, maar soms is deze aanpak overdreven. Als er veel scheidingstekens zijn (bijvoorbeeld spaties, tekens voor nieuwe regels, tabs, punten), dan moet je een nogal complexe reguliere expressie maken."
"Nou, natuurlijk. En als het moeilijk te lezen is, dan is het moeilijk om veranderingen aan te brengen.
StringTokenizer
klas
Een fragment uit een lezing met een mentor als onderdeel van de Codegym University-cursus. Schrijf je in voor de volledige cursus.
"Java heeft een speciale klasse wiens taak het is om een string op te splitsen in substrings.
"Deze klasse gebruikt geen reguliere expressies: in plaats daarvan geef je gewoon een string door die bestaat uit scheidingstekens. Het voordeel van deze aanpak is dat de hele string niet in één keer in stukken wordt gebroken, maar in plaats daarvan van het begin naar het einde gaat. stap voor stap.
De klasse heeft een constructor en twee methoden. We geven de constructor een tekenreeks door die we in delen splitsen, en een tekenreeks die bestaat uit een reeks begrenzingstekens.
methoden | Beschrijving |
---|---|
|
Retourneert de volgende subtekenreeks |
|
Controleert of er meer subtekenreeksen zijn. |
"Deze klasse doet me op de een of andere manier denken aan de klasse Scanner, die ook methoden nextLine()
en heeft hashNextLine()
.
"Dat is een goede observatie die je hebt gemaakt. Je kunt een StringTokenizer
object maken met deze opdracht:
StringTokenizer name = new StringTokenizer(string, delimiters);
Waar string de string is die in delen moet worden verdeeld. En scheidingstekens is een tekenreeks en elk teken erin wordt behandeld als een scheidingsteken. Voorbeeld:
Code | Console-uitvoer |
---|---|
|
|
"Merk op dat elk teken in de tekenreeks die in de tweede tekenreeks aan de StringTokenizer
constructor wordt doorgegeven, wordt beschouwd als een scheidingsteken.
String.format()
methode en StringFormatter
klasse
"Een andere interessante methode van de klasse String is format()
.
"Stel dat u verschillende variabelen hebt die gegevens opslaan. Hoe geeft u ze op één regel op het scherm weer? We hebben bijvoorbeeld enkele gegevens (linkerkolom) en gewenste uitvoer (rechterkolom):
Code | Console-uitvoer |
---|---|
|
|
De code voor zo'n programma ziet er ongeveer zo uit:
Programmacode |
---|
|
"Je zult het met me eens zijn dat de code niet erg leesbaar is. En als de namen van variabelen langer waren, zou de code nog moeilijker worden:
Programmacode |
---|
|
"Ja, het is moeilijk te lezen!"
"Maak je geen zorgen. Dit is een veel voorkomende situatie in real-world programma's, dus ik wil je vertellen over een manier om deze code eenvoudiger en beknopter te schrijven.
String.format
"De String
klasse heeft een statische format()
methode: hiermee kunt u een patroon specificeren voor het samenstellen van een string met gegevens. Het algemene uiterlijk van de opdracht is als volgt:
String name = String.format(pattern, parameters);
Voorbeeld:
Code | Resultaat |
---|---|
|
|
|
|
|
|
"De format()
eerste parameter van de methode is een formaatreeks die alle gewenste tekst bevat, samen met speciale tekens die formaatspecificaties worden genoemd (zoals %d
en %s
) op de plaatsen waar u gegevens moet invoegen.
"De format()
methode vervangt deze %s
en %d
opmaakspecificaties door de parameters die volgen op de opmaakstring in de parameterlijst. Als we een string willen invoegen, dan schrijven we . %s
Als we een getal willen invoegen, dan is de opmaakspecificatie %d
. Voorbeeld:
Code | Resultaat |
---|---|
|
s is gelijk aan"a=1, b=4, c=3" |
"Hier is een korte lijst met indelingsspecificaties die kunnen worden gebruikt in de indelingsreeks:
Specificatie | Betekenis |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
echt nummer: float ,double |
|
boolean |
|
char |
|
Date |
|
% karakter |
"Deze specificaties geven het type gegevens aan, maar er zijn ook specificaties die de volgorde van de gegevens aangeven. Om een argument op nummer te krijgen (de nummering begint bij één), moet u "% 1$ d" schrijven in plaats van " %d ". Voorbeeld:
Code | Resultaat |
---|---|
|
s is gelijk aan"a=13, b=12, c=11" |
%3$d
krijgt het 3e argument, %2$d
krijgt het tweede argument en %d
krijgt het allereerste argument. De %s
en %d
formaatspecificaties verwijzen naar argumenten, ongeacht de specificatie zoals %3$d
of%2$s
String zwembad
"Elke tekenreeks die in code is gespecificeerd als een letterlijke tekenreeks, wordt opgeslagen in een geheugengebied dat de wordt genoemd StringPool
terwijl het programma wordt uitgevoerd. StringPool
is een speciale array voor het opslaan van tekenreeksen. Het doel ervan is om de opslag van tekenreeksen te optimaliseren:
"Ten eerste moeten de in code gespecificeerde strings ergens worden opgeslagen, toch? Code bestaat uit commando's, maar gegevens (vooral grote strings) moeten afzonderlijk van de code in het geheugen worden opgeslagen. Alleen verwijzingen naar stringobjecten verschijnen in code.
"Ten tweede moeten alle identieke letterlijke tekenreeksen slechts één keer in het geheugen worden opgeslagen. En dat is precies hoe het werkt. Wanneer uw klassecode wordt geladen door de Java-machine, worden alle letterlijke tekenreeksen toegevoegd aan de als ze er nog niet zijn. Als ze dat wel StringPool
zijn al aanwezig is, gebruiken we gewoon een stringreferentie uit de StringPool
.
Dienovereenkomstig, als u dezelfde letterlijke waarde toewijst aan verschillende String-variabelen in uw code, dan zullen deze variabelen dezelfde verwijzing bevatten. Er wordt een letterlijke waarde toegevoegd aan de StringPool
enige keer. In alle andere gevallen krijgt de code een verwijzing naar de string die al in het StringPool
.
Hier is ongeveer hoe het werkt:
Code | Werken met StringPoll |
---|---|
|
|
"Daarom slaan de variabelen a
en b
dezelfde referenties op."
"Ik hoop dat ik het allemaal goed begrepen heb.
intern()
methode.
"En het beste is dat je elke string programmatisch kunt toevoegen aan de StringPool
. Om dit te doen, hoef je alleen maar de methode String
van de variabele aan te roepen.intern()
"De intern()
methode voegt de string toe aan de StringPool
als die er nog niet is, en geeft een verwijzing terug naar de string in de StringPool
.
"En wat gebeurt er als twee identieke strings worden toegevoegd aan de met StringPool
behulp van de intern()
methode?"
"De methode retourneert dezelfde referenties. Dit kan worden gebruikt om strings te vergelijken op basis van referentie. Voorbeeld:
Code | Opmerking |
---|---|
|
|
|
|
Het is onwaarschijnlijk dat u deze methode vaak zult gebruiken. Dat gezegd hebbende, mensen vragen er graag naar in sollicitatiegesprekken.
'Dus het is beter om er iets van te weten dan om het niet te weten. Bedankt, Ellie!'
GO TO FULL VERSION