"Vad tycker du, Amigo? Vilken är den populäraste Java-klassen efter int?"

"Du har redan gett mig en spoiler i titeln på lektionen, Ellie. Det är String!"

"Det är faktiskt en spoiler. Stringanvänds absolut överallt. Den har en massa användbara metoder som du är bättre att känna till.

" StringKlassen är den enda klassen förutom primitiva typer vars bokstavliga ord kan användas i ett switchuttalande; kompilatorn hanterar strängaddition och strängobjekt på ett speciellt sätt; Stringobjekt lagras i minnet på ett speciellt sätt. I grund och botten Stringär klassen en mycket specialklass.

"Klassen har också Stringett gäng medhjälparklasser vars syfte är att ytterligare förenkla arbetet med strängar i Java. När du lär dig allt detta kommer många saker verkligen att bli mycket lättare för dig att göra."

"Jag kan inte vänta."

"Tja, vi börjar från själva kärnan av detta ekosystem - klassens organisation. StringKlassens struktur Stringär faktiskt väldigt enkel: inuti den finns en teckenuppsättning ( chararray) som lagrar alla tecken i strängen. För Så här lagras till exempel ordet "Hej":

Stringklassens struktur

Det är viktigt.

Egentligen är detta inte riktigt korrekt. Eftersom Stringklassen är väldigt viktig använder den många optimeringar och data lagras internt inte som en teckenuppsättning, utan helt enkelt som en bytematris.

Metoder i klassen String

Klassen Stringhar många metoder: den har bara 18 konstruktörer! Så nedan kommer jag bara att lista de mest använda:

Metoder Beskrivning
int length()
Returnerar antalet tecken i strängen
boolean isEmpty()
Kontrollerar om strängen är en tom sträng
boolean isBlank()
Kontrollerar att strängen endast innehåller blanksteg: mellanslag, tabb, ny rad, etc.
char charAt(int index)
Returnerar tecknet vid indexpositionen i strängen.
char[] toCharArray()
Returnerar en uppsättning av tecken (en kopia) som utgör strängen
byte[] getBytes()
Konverterar en sträng till en uppsättning byte och returnerar arrayen av byte.
String[] split(String regex)
Delar upp en sträng i flera delsträngar.
String join(CharSequence delimiter, elements)
Sammanfogar flera delsträngar
String intern()
Lägger ett snöre i snörepoolen.

"Det ser väldigt bra ut!"

"Låt oss skriva ett program som konverterar en filsökväg från Unix-stil till Windows-stil. Unix använder tecknet /för att separera mappar, medan Windows använder \tecknet.

Lösning 1. Använda en chararray

Koda Anteckningar
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);
Skapa ett skannerobjekt
Läs en rad från konsolen

Konvertera en sträng till en teckenuppsättning
Slinga över tecknen
Om tecknet är , /ersätt
det med \. Glöm inte att fly.

Skapa en ny sträng baserat på teckenuppsättningen.
Visa strängen.

Lösning 2. Använd metoderna split()och join():

Koda Anteckningar
Scanner console = new Scanner(System.in);
String path = console.nextLine();

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


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


System.out.println(result);
Skapa ett skannerobjekt
Läs en rad från konsolen

Konvertera sträng till en array av strängar . Tecknet /används som en separator (de extra två snedstreck är resultatet av dubbel escape).
Sammanfoga alla strängar i raden av strängar . Den \används som en separator (vi ser att den har escaped).

Visa strängen.

Lösning 3. Använd replace(char oldChar, char newChar)metoden:

Koda Anteckningar
Scanner console = new Scanner(System.in);
String path = console.nextLine();

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

System.out.println(result);
Skapa ett skannerobjekt
Läs en rad från konsolen

Byt bara ut ett tecken med ett annat
(det andra är escaped)
Visa strängen.

"Jag gillade den tredje lösningen mest. Men jag ska träna alla tre."

"Bra gjort, Amigo. Jag ser att du redan är otålig att omsätta dina nya kunskaper i praktiken. Lektionen är över."