Du liest:
Java String: Alles über die Zeichenketten

Java String: Alles über die Zeichenketten

von Pero
30.11.2020

Einführung – Der Java String

Der String ist einer der am häufigsten genutzten Datentypen in der Programmierung. Ein Java String ist eine Sequenz, also Aneinanderreihung, von Zeichen. Ein String wird dabei in einfachen oder doppelten Anführungszeichen geschrieben. In einem String können sowohl Buchstaben als auch Zahlen und Sonderzeichen enthalten sein. Wichtig ist nur, dass sich alle gewünschten Zeichen innerhalb der Anführungszeichen befinden. Die Verwendung von Strings unterscheidet sich trotz der prinzipiell gleichen Basis von Programmiersprache zu Programmiersprache. Einige Sprache erleichtern mit verschiedenen Methoden die Arbeit mit Strings – andere wiederum nicht. Ein Verständnis für die Arbeit mit Strings aufzubauen ist eine der wichtigsten Kompetenzen eines Programmierers. Da der String einer der am häufigsten verwendeten Datentypen ist, ist eine gewisse Kenntnis über seine Funktionsweise unerlässlich.

Strings werden in der Programmiersprache Java anders als in den anderen populären Programmiersprachen behandelt. Dafür gibt es viele Gründe. Java bietet umfangreiche Methoden, die die Arbeit mit Strings deutlich erleichtern. Außerdem existieren verschiedene Klassen für Strings, weshalb wir in diesem Artikel den String in Java und seine Anwendung kennenlernen werden.

Java Strings

Java ist eine objektorientierte Programmiersprache. Die Bedeutung des Strings ist in Java allerdings ein bisschen anders. In Java ist jeder String ein eigenes Objekt. Jedes dieser Objekte repräsentiert wiederum eine Folge von Zeichen. Jetzt kennen wir das grundsätzliche Konzept der Strings in Java. Zusätzlich müssen wir beachten, dass Strings in Java unveränderlich sind.

So erstellst du einen Java String

1 . Das Java String-Objekt

Einen String können wir mit dem Schlüsselwort „new“ erstellen.

String str1 = new String();
String str2 = new String("Hallo Welt!");

„str1“ stellt in unserem Beispiel einen leeren String dar, während „str2“ beim Erstellen direkt mit „Hallo Welt!“ befüllt wurde. So verwenden wir das Schlüsselwort „new“.

2 . Der Java String Literal

Diese Möglichkeit ist die häufigste genutzte Möglichkeit unter Java.

String str1 = "";
String str2 = "Hallo Welt!";

In Java kann ein String direkt über die doppelten Anführungsstriche definiert werden. Anders als in anderen Sprachen, wie zum Beispiel Python, können in Java keine Strings über einfache Anführungszeichen definiert werden.

Der Java String Pool

Der Java String Pool ist ein wichtiges, aber auch einzigartiges Konzept in Java. Deshalb besprechen wir den String Pool und warum dieser in Java so wichtig ist.

Java besitzt eine Art Erinnerungsvermögen, in dem alle genutzten Objekte gespeichert werden. Diesen Speicher nennt man in Java den Heap. Der String Pool, von dem wir sprechen, befindet sich auf diesem Heap. Immer wenn ein String in Java erzeugt wird, wird der String Pool durch die Java Virtual Maschine (JVM) überprüft. Dabei wird geprüft, ob derselbe Inhalt schon im Pool existiert. Existieren Strings bzw. Inhalte bereits, wird lediglich eine Referenz auf das bereits gespeicherte Objekt zurückgegeben. Dann wird kein neues Objekt erstellt. Ist der String noch nicht auf dem Heap abgelegt, wird ein neues Objekt erstellt.

Versuchen wir den Prozess an einem Beispiel zu verstehen.

String str1 = "Hallo";
String str2 = "Hi";
String str3 = "Hallo";

„str1“ und „str2“ sind nicht im Pool bzw. Heap vorhanden. Es werden also jeweils neue Objekte erzeugt. Der String „str3“ ist bereits im Pool vorhanden. Jetzt wird kein neues Objekt erzeugt, sondern eine Referenz auf das Objekt „str1“ zurückgegeben.

Doch warum wird das Konzept auf diese Weise umgesetzt? Ganz einfach ausgedrückt reduziert es den Speicherverbrauch und optimiert außerdem die Laufzeit der Programme.

Die wichtigsten Methoden für den Java String

Die String Klasse in Java besitzt einige integrierte Funktionen. Diese Methoden werden für Operationen an den Strings verwendet. Diese reduzieren neben der Zeit und dem Aufwand des Programmierens auch die jeweilige Länge des gesamten Quellcode. Schauen wir uns dafür einmal die wichtigsten Methoden in Java an:

1. length()

Die length()-Methode wird verwendet, um die Gesamtlänge eines Strings zu erhalten. Es ist die wohl am meisten benutzte Methode rund um den String.

class main {
  public static void main(String[] args) {
    String str1 = "Hallo Welt!";

    System.out.println("Länge von str1: " + str1.length());
  }
}

Die Funktion wird uns einen Integer als Länge zurückgeben.

Länge eines Java String mit Hilfe von der length()-Methode ermitteln

2. replace()

Die replace()-Methode wird verwendet, um ein bestimmtes Zeichen bzw. eine bestimmte Sequenz innerhalb eines Strings zu verändern. Dabei wird nicht der bereits existierende String modifiziert, sondern lediglich die modifizierte Variante zurückgegeben.

class main {
  public static void main(String[] args) {
    String str1 = "Hallo Welt!";
    String str2 = str1.replace('l', 'm');
    System.out.println(str1);
    System.out.println(str2);
  }
}

Die replace()-Methode akzeptiert zwei Parameter. Zunächst wird die Sequenz angegeben, die ersetzt werden soll. Als Zweites wird dann die einzusetzende Sequenz festgelegt. In unserem Beispiel werden alle „l“ durch ein „m“ ersetzt.

Zeichen eines Strings durch die replace Methode ersetzen.

Das „l“ taucht drei mal im ersten String „str1“ auf. In jedem Fall wird jedes „l“ durch ein „m“ ersetzt. Dabei ist wichtig, dass „str1“ nicht modifiziert wird.

3. charAt()

Die charAt()-Methode akzeptiert einen Integer als Parameter und gibt im Anschluss das Zeichen am entsprechenden Index innerhalb des Strings aus.

class main {
  public static void main(String[] args) {
    String str1 = "Hallo Welt!";
    System.out.println("Zeichen am 3. Index ist: " + str1.charAt(3))
  }
}

Der obige Code führt zu folgender Ausgabe:

Das Zeichen einer Position mit Hilfe der charAt()-Methode ermitteln.

Wenn sich der übergebene Index nicht innerhalb der Grenzen des Strings befindet, wird ein Fehler ausgegeben (IndexOutOfBoundException).

4. equals()

Die equal()-Funktion wird für den Vergleich von zwei Strings verwendet. Sind die Strings gleich, wird „true“ zurückgegeben. Bei einem Unterschied innerhalb der Strings wird „false“ zurückgegeben.

class main {
  public static void main(String[] args) {
    String str1 = "Hallo Welt!";
    String str2 = "Hallo Welt!";
    String str3 = "Sag Hallo!";
    System.out.println("str1 gleich zu str2? " + str1.equals(str2));
    System.out.println("str1 gleich zu str3? " + str1.equals(str3));
  }
}
Zwei Java String auf Gleichheit prüfen.

Wie wir sehen sind „str1“ und „str2“ gleich, es wird also „true“ ausgegeben. „str1“ und „str3“ wiederrum unterscheiden sich, weshalb „false“ ausgegeben wird.

5. contains()

Die contains()-Methode wird verwendet, um einen String auf ein bestimmtes Zeichen bzw. eine bestimme Zeichensequenz zu untersuchen. Es wird je nach Ergebnis ein Boolean zurückgegeben.

class main {
  public static void main(String[] args) {
    String str1 = "Hallo Welt!"
    System.out.println(" 'o' existiert? " + str1.contains("o"));
    System.out.println(" 'z' existiert? " + str1.contains("z"));
    System.out.println(" 'Hallo' existiert? " + str1.contains("Hallo"));
  }
}
Prüfen ob ein Zeichen in einem Java String beinhaltet ist.

Bei der contains()-Methode müssen wir beachten, dass zwischen Klein- und Großbuchstaben unterschieden wird.

6. indexOf()

Die indexOf()-Methode wird verwendet, um den Index innerhalb des Strings eines übergebenen Zeichens zu erhalten. Dabei wird lediglich der Index des ersten Vorkommens ausgegeben. Auch hier gilt es wieder beachten, dass die Funktion zwischen Klein- und Großbuchstaben unterscheidet.

class main {
  public static void main(String[] args) {
    String str1 = "Hallo Welt!"
    System.out.println("Index von 'l': " + str1.indexOf("l"));
    System.out.println("Index von 'z': " + str1.indexOf("z"));
  }
}
Die Position eines Zeichens mit Hilfe der indexOf()-Methode ermitteln.

Ein „l“ existiert in unserem String an der zweiten, dritten und achten Stelle. Die indexOf()-Methode gibt uns allerding nur den ersten Index zurück. Da das „z“ nicht innerhalb des Strings vorkommt, wird „-1“ zurückgegeben.

7. concat()

Die concat()-Methode kann von uns verwendet werden, um mehrere Strings zusammenzufügen.

class main {
  public static void main(String[] args) {
    String str1 = "Hallo";
    String str2 = " Welt!";
    String str3 = str1.concat(str2);
    System.out.println("str3: " + str3);
  }
}
Zwei Java Strings mit der concat-Methode zusammenführen

8. isEmpty()

Die isEmpty()-Methode wird verwendet, um einen leeren String, also ohne Zeichen, zu detektieren. Dabei wird ein Boolean zurückgegeben.

class main {
  public static void main(String[] args) {
    String str1 = "";
    String str2 = "Hallo Welt!"
    System.out.println("Ist str1 leer? " + str1.isEmpty());
    System.out.println("Ist str2 leer? " + str2.isEmpty());
  }
}
Prüfen ob ein Java String leer ist mit der isEmpty()-Methode

„str1“ ist leer, sodass dementsprechend „true“ ausgegeben wird. „str2“ ist hingegen nicht leer, weshalb „false“ ausgegeben wird.

Ein Java String mit StringBuilder und StringBuffer erstellen

StringBuilder und StringBuffer sind zwei weitere Klassen, die in Java zum Erstellen von Strings verwendet werden. Wie wir bereits am Anfang festgestellt haben, sind Strings in Java unveränderlich, können also nach dem Erstellen nicht mehr modifiziert werden. Allerdings ermöglichen es uns StringBuilder und StringBuffer wiederum veränderliche Strings zu erstellen. Deshalb unterscheiden sie sich von anderen String-Klassen. Zusätzlich bieten sie weitere Methoden an, die für uns nützlich sein können.

Starten wir zunächst mit dem Erstellen einer StringBuilder-Klasse.

StringBuilder str1 = new StringBuilder("Hallo Welt!");

Parallel zur normalen String-Klasse verwenden wir das Schlüsselwort „new“, um einen neuen String zu erstellen. Betrachten wir erneut einige Methoden, um den Unterschied zwischen der „normalen“ String-Klasse und in unserem Fall der StringBuilder-Klasse besser zu verstehen.

1. append()

class main {
  public static void main(String[] args) throws java.lang.Exception {
    StringBuilder str1 = new StringBuilder("Hallo");
    System.out.println("str1 vor dem zusammfuegen: " + str1);
    str1.append(" Welt!");
    System.out.println("str1 nach dem zusammenfuegen: " + str1);
  }
}

Die Sequenz, die wir an den String anhängen möchten, übergeben wir als Argument in die append()-Methode.

Mit der append-Methode weitere Zeichenketten an der bestehenden anhängen.

2. deleteCharAt()

Die deleteCharAt()-Methode wird verwendet, um ein bestimmtes Zeichen an einer bestimmten Stelle im String zu löschen.

class main {
  public static void main(String[] args) throws java.lang.Exception {
    StringBuilder str1 = new StringBuilder("Hallo Welt!");
    System.out.println("str1 vor dem Löschen: " + str1);
    str1.deleteCharAt(0);
    System.out.println("str1 nach dem Löschen: " + str1);
  }
}
Ein Zeichen auf einer bestimmten Position entfernen.

In den obigen zwei Beispiel haben wir vergleichbare Funktionalitäten zu den vorigen betrachtet. Mit der „normalen“ String-Klasse war es uns allerdings nicht möglich, einen String zu modifizieren oder Elemente aus diesem zu löschen.

Die StringBuffer-Klasse ist ziemlich gleich zur SringBuilder-Klasse und stellt ähnliche Methoden bereit. Es gibt allerdings einen großen Unterschied zwischen beiden.

Während StringBuilder nicht synchronisiert ist, ist die StringBuffer-Klasse synchronisiert. Das heißt wir können von mehreren Threads gleichzeitig auf ein Objekt der StringBuilder-Klasse zugreifen. Dies ist bei der StringBuffer-Klasse hingegen nicht möglich. Die StringBuilder-Klasse ist also effizienter als die StringBuffer-Klasse.

Zusammenfassung – Der Java String

Der String ist eines der großen Themen in Java. Wir stellen fest, dass der String in den meisten anderen Programmiersprachen nicht so ein großes Thema wie in Java darstellt. Java bietet dabei etwas anderes und stellt z. B. die gelernten Methoden bereit. Außerdem gehen Themen wie Java String Pool (Java Heap) tief in das Thema hinein. In diesem Artikel haben wir dieses Konzept allerdings einfach verstehen können. Strings sind in Java grundsätzlich unveränderlich, was in der Programmierung häufig Probleme erzeugt. Deshalb stellt Java für dieses Problem einige weitere Klassen bereit.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren