"Wat denk je, Amigo? Wat is de meest populaire Java-klasse na int?"

"Je gaf me al een spoiler in de titel van de les, Ellie. Het is String!"

"Inderdaad, het is een spoiler. Stringwordt absoluut overal gebruikt. Het heeft een heleboel handige methoden die je maar beter kunt kennen.

"De Stringklasse is de enige andere klasse dan primitieve typen waarvan de letterlijke waarden in een switchstatement kunnen worden gebruikt; de compiler behandelt stringoptellingen en String-objecten op een speciale manier; Stringobjecten worden op een speciale manier opgeslagen in het geheugen. In wezen Stringis de klasse een zeer speciale klasse.

"De klasse heeft ook Stringeen aantal hulpklassen die tot doel hebben het werken met strings in Java verder te vereenvoudigen. Als je dit allemaal leert, zullen veel dingen echt veel gemakkelijker voor je worden."

"Ik kan niet wachten."

"Nou, we beginnen bij de kern van dit ecosysteem - de organisatie van de Stringklasse. De structuur van de Stringklasse is eigenlijk heel eenvoudig: binnenin is een karakterarray ( chararray) die alle karakters van de string opslaat. Voor zo wordt bijvoorbeeld het woord 'Hallo' opgeslagen:

Structuur van de klasse String

Het is belangrijk.

Eigenlijk is dit niet helemaal nauwkeurig. Omdat de Stringklasse erg belangrijk is, gebruikt deze veel optimalisaties en worden de gegevens intern opgeslagen, niet als een tekenarray, maar gewoon als een byte-array.

Methoden van de klasse String

De Stringklasse heeft veel methoden: hij heeft alleen al 18 constructors! Dus hieronder zal ik alleen de meest gebruikte opsommen:

methoden Beschrijving
int length()
Retourneert het aantal tekens in de tekenreeks
boolean isEmpty()
Controleert of de tekenreeks een lege tekenreeks is
boolean isBlank()
Controleert of de tekenreeks alleen witruimtetekens bevat: spatie, tab, nieuwe regel, enz.
char charAt(int index)
Retourneert het teken op de indexpositie in de tekenreeks.
char[] toCharArray()
Retourneert een array van de tekens (een kopie) waaruit de tekenreeks bestaat
byte[] getBytes()
Converteert een tekenreeks naar een reeks bytes en retourneert de reeks bytes.
String[] split(String regex)
Splitst een tekenreeks in meerdere subtekenreeksen.
String join(CharSequence delimiter, elements)
Voegt meerdere subtekenreeksen samen
String intern()
Plaatst een string in de stringpool.

"Dat ziet er heel goed uit!"

"Laten we een programma schrijven dat een bestandspad converteert van Unix-stijl naar Windows-stijl. Unix gebruikt het /teken om mappen te scheiden, terwijl Windows het \teken gebruikt.

Oplossing 1.char Een array gebruiken

Code Notities
Scanner console = new Scanner(System.in);
String path = console.nextLine();

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
Maak een Scanner-object
Lees een regel van de console

Converteer een tekenreeks naar een tekenarray
Loop over de tekens
Als het teken is /,
vervang het dan door \. Vergeet het ontsnappen niet.

Maak een nieuwe tekenreeks op basis van de tekenreeks.
Geef de tekenreeks weer.

Oplossing 2. De methodes split()en gebruiken join():

Code Notities
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String array[] = path.split("\\/");


String result = String.join("\\", array);


System.out.println(result);
Maak een Scanner-object
Lees een regel van de console

Converteer tekenreeks naar een reeks tekenreeksen . Het /teken wordt gebruikt als scheidingsteken (de twee extra schuine strepen zijn het resultaat van dubbele escape).
Voeg alle tekenreeksen in de reeks tekenreeksen samen . De \wordt gebruikt als scheidingsteken (we zien dat het ontsnapt is).

Geef de tekenreeks weer.

Oplossing 3. Met behulp van de replace(char oldChar, char newChar)methode:

Code Notities
Scanner console = new Scanner(System.in);
String path = console.nextLine();

String result = path.replace('/', '\\');

System.out.println(result);
Maak een Scanner-object
Lees een regel van de console

Vervang gewoon het ene teken door het andere
(het tweede is een escape-teken)
Geef de tekenreeks weer.

"Ik vond de derde oplossing het leukst. Maar ik zal ze alle drie oefenen."

"Goed gedaan, Amigo. Ik zie dat je al ongeduldig bent om je nieuwe kennis in de praktijk te brengen. De les is voorbij."