# Zeichenkettenfunktionen

Bornierte Menschen soll man nicht widerlegen wollen. Widerspruch ist immerhin ein Zeichen von Anerkennung.
Richard von Schaukal, österr. Lyriker

Zwar wurde zu Beginn dieses Buchs davon gesprochen, dass ein String ein Variablentyp sei, jedoch ist das nicht ganz richtig bzw. nicht die ganze Wahrheit. Es hat aber anfangs das Verstehen gewisser Mechanismen in JavaScript erleichtert. Richtig ist, dass Strings Objekten ähnlich sind, die auf einem Array mehrerer einzelner Zeichen basieren. Dies konnten Sie zu dem Zeitpunkt feststellen, als mit der Methode toLowerCase alle Zeichen eines Strings in Kleinbuchstaben umgewandelt wurden. Sie können Strings auf zwei verschiedene Arten definieren: entweder wie normale Variablen

var zeichenkette = "Zeichenkette";

oder aber wie ein Objekt:

var zeichenkette = new String("Zeichenkette");

In der Regel wird ein String aber ganz normal wie andere Variablen definiert, da dies kürzer und übersichtlicher ist.

Zusätzlich zu der Methode toLowerCase gibt es noch weitere Methoden und Eigenschaften, die Sie im Laufe Ihrer eigenen Programmieraufgaben sicherlich das ein oder andere Mal benötigen werden.

# Länge

Die Länge einer Zeichenkette können Sie durch die Eigenschaft length ermitteln. Diese Eigenschaft gibt die tatsächliche Anzahl aller Zeichen eines Strings zurück.

var zeichenkette = "Dies ist eine Zeichenkette";  
laenge = zeichenkette.length;  
document.write(laenge);

Dieses Script würde die folgende Bildschirmausgabe erzeugen:

26

Dies liegt daran, dass der String zeichenkette inklusive aller Leerzeichen insgesamt 26 Zeichen enthält.

Die Eigenschaft length ist übrigens die einzige Eigenschaft, über die Strings verfügen.

# Groß- und Kleinschreibung

Besonders interessant ist die Möglichkeit, alle Zeichen eines Strings in Groß- oder Kleinbuchstaben umzuwandeln. Möchten Sie z. B. überprüfen, ob eine bestimmte Zeichenkette innerhalb einer anderen vorkommt, ist es leichter, wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen müssen, immerhin ist Test eine andere Zeichenkette als TEST.

Alle Zeichen eines Strings können Sie mit der Methode toLowerCase() in Kleinbuchstaben und mit der Methode toUpperCase() in Großbuchstaben umwandeln.

var zeichenkette = "Dies ist eine Zeichenkette";  
document.write(zeichenkette);  
document.write(zeichenkette.toLowerCase());  
document.write(zeichenkette.toUpperCase());  
document.write(zeichenkette);

Die Ausgabe dieses Scripts sieht wie folgt aus:

Dies ist eine Zeichenkette
dies ist eine zeichenkette
DIES IST EINE ZEICHENKETTE
Dies ist eine Zeichenkette

Wichtig ist jedoch dabei, dass keine Veränderung stattfindet. Die Originalschreibweise des Strings bleibt erhalten, da die Methoden toLowerCase() und toUpperCase() nur die veränderte Schreibweise zurückgeben, nicht aber die eigentliche Schreibweise ändern.

# Zeichenposition

Mit der Methode indexOf() können Sie das erste Vorkommen eines Zeichens oder einer Zeichenkette ermitteln. Die Methode erwartet dabei als Parameter das zu suchende Zeichen oder die Zeichenkette.

var zeichenkette = "Dies ist eine Zeichenkette";  
document.write(zeichenkette.indexOf("ist"));

Die Ausgabe für dieses Script sieht folgendermaßen aus:

5

Sollten Sie sich jetzt fragen, warum die Methode indexOf() in diesem Beispiel den Wert 5 statt 6 ausgibt, sollten Sie bedenken, dass – wie bereits erwähnt – Strings auf Arrays aus mehreren einzelnen Zeichen basieren. Da bei Arrays die Zählung mit 0 beginnt, erfolgt auch bei Strings die Zählung mit 0. Das erste Zeichen eines String hat also die Position 0, das zweite die Position 1 usw. Sollte das angegebene Zeichen oder die Zeichenkette nicht gefunden werden können, wird der Wert –1 zurückgegeben.

Optional können Sie der Methode indexOf() aber auch eine Startposition übergeben, ab der der String durchsucht werden soll. So könnten Sie mit dieser Methode und der Angabe einer Startposition einen String daraufhin überprüfen, wie oft ein Zeichen oder eine Zeichenkette innerhalb dieses Strings vorkommt.

var zeichenkette = "Dies ist eine Zeichenkette";  
var anz = 0;  
var pos = 0;  
while(zeichenkette.indexOf("e",pos) > -1)  
{  
  pos = zeichenkette.indexOf("e",pos);  
  document.write("e an Position "+pos+"<br>");  
  anz++;  
  pos++;  
}  
document.write("e wurde "+anz+"x gefunden");

Die Ausgabe für dieses Beispiel lautet:

e an Position 2
e an Position 9
e an Position 12
e an Position 15
e an Position 19
e an Position 22
e an Position 25
e wurde 7x gefunden

Zuallererst werden die Variablen anz und pos auf 0 gesetzt. In der Variablen anz soll gespeichert werden, wie oft der Buchstabe »e« innerhalb des Werts der Zeichenkette zeichenkette gefunden wurde. Mit der Variablen pos bestimmen Sie die Startposition, ab der gesucht werden soll. Die while-Schleife wird ausgeführt, solange der Rückgabewert von indexOf() größer –1 ist (die Zeichenkette also gefunden wurde). Gesucht wird nach dem Zeichen »e« ab der Position pos. Im Anweisungsblock wird nun der Variablen pos die Position des Zeichens zugewiesen und in der darauf folgenden Zeile ausgegeben. Danach wird sowohl anz als auch pos um den Wert 1 erhöht. Der Grund, warum anz erhöht wird, versteht sich von selbst (zum Zählen). Die Variable pos wird erhöht, weil sonst das Zeichen oder die Zeichenkette immer wieder an derselben Stelle gefunden werden würde. Da Sie aber bereits wissen, dass es an dieser Stelle vorkommt, legen Sie fest, dass indexOf() nach der Position des Zeichens weitersuchen soll. Zum Schluss wird dann noch die Variable anz ausgegeben.

# Teilzeichen

Um ein einzelnes Zeichen eines Strings auszulesen, benötigen Sie die Methode charAt(). Sie erwartet als Parameter die Position des Zeichens, das zurückgegeben werden soll.

var zeichenkette = "Dies ist eine Zeichenkette";  
char = zeichenkette.charAt(5);  
document.write(char);

Dieses Script erzeugt die folgende Ausgabe:

i

Das Zeichen an Position 5 des Strings zeichenkette lautet i. Denken Sie daran, dass mit der Zählung bei 0 angefangen wird.

Die Methode kann sehr gut dafür verwendet werden, um ein bestimmtes Zeichen eines Strings durch ein anderes zu ersetzen. Um in einem String alle Buchstaben »e« durch ein »o« zu ersetzen, müssten Sie folgendes Script verwenden:

var zeichenkette = "Dies ist eine Zeichenkette";  
var neu = "";  
for(var i = 0; i < zeichenkette.length; i++)  
{  
  if(zeichenkette.charAt(i) == "e")  
  {  
    neu += "o";  
  }  
  else  
  {  
    neu += zeichenkette.charAt(i);  
  }  
}  
document.write(neu);

Die Ausgabe dieses Scripts lautet:

Dios ist oino Zoichonkotto

Zuerst wird der bekannte String zeichenkette und anschließend ein weiterer String mit dem Bezeichner neu definiert. Dieser String soll den veränderten String zeichenkette zugewiesen bekommen. In der for-Schleife legen Sie als Bedingung fest, dass die Schleife durchlaufen werden soll, solange i kleiner als die Anzahl der Zeichen des Strings zeichenkette ist. Im Anweisungsblock der for-Schleife wird nun überprüft, ob das Zeichen an der Position i dem Buchstaben »e« entspricht. Ist dies der Fall, wird dem String neu der Buchstabe »o« angehängt, ansonsten wird ihm das Zeichen an Position i von zeichenkette angehängt. Zu guter Letzt wird der String neu im Browser ausgegeben.

# Teilstring

Es gibt zwei Varianten, um aus einem String einen Teilstring zu kopieren.

# Variante 1

Anders als die Methode charAt() liefert substr() eine Zeichenkette aus einem String zurück. Die Methode erwartet als Parameter zum einen die Position, ab der der Teilstring kopiert werden soll, und zum anderen die Angabe, wie viele Zeichen kopiert werden sollen.

var zeichenkette = "Dies ist eine Zeichenkette";  
teilstring = zeichenkette.substr(14,12);  
document.write(teilstring);

Das Script gibt Folgendes im Browser aus:

Zeichenkette

Das Wort »Zeichenkette« beginnt im String zeichenkette an der Position 14 (Zählung beginnt bei 0) und ist insgesamt 12 Zeichen lang. Dieser Teilstring wird dem String teilstring zugewiesen und anschließend im Browser ausgegeben.

# Variante 2

Mit der Methode substring() können Sie eine Zeichenkette von einer Position des Quellstrings bis zu einer weiteren Position des Quellstrings zurückgeben lassen. Als Parameter erwartet die Methode die Anfangs- und Endposition.

var zeichenkette = "Dies ist eine Zeichenkette";  
teilstring = zeichenkette.substring(14,26);  
document.write(teilstring);

Die Ausgabe im Browser:

Zeichenkette

Nach der Definition des Strings zeichenkette wird ein Teilstring von Position 14 bis zur Position 26 aus dem String zeichenkette kopiert und dem String teilstring zugewiesen. Anschließend wird teilstring im Browser ausgegeben.

# String zerlegen

Die Methode split() ermöglicht es, einen Quellstring zu zerlegen. Die Zerlegung erfolgt nach einem bestimmten Zeichen, das der Methode als Parameter übergeben wird. Das Ergebnis dieser Methode ist ein Array aus Strings.

var zeichenkette = "Dies ist eine Zeichenkette";  
zerlegt = zeichenkette.split(" ");  
document.write(zerlegt.length);

Die Ausgabe dieses Scripts lautet:

4

Zuerst wurde die Ihnen bereits bekannte Variable zeichenkette definiert. Anschließend wird der Variablen zerlegt das Ergebnis des Methodenaufrufs von split() zugewiesen. Der Parameter, der an split() übergeben wurde, veranlasst die Methode, den String zeichenkette an all den Stellen zu teilen, an denen ein Leerzeichen vorkommt. Der String zeichenkette enthält insgesamt drei Leerzeichen, somit erhalten Sie vier Teilstrings. Anschließend wird die Größe des zerlegt-Arrays im Browser ausgegeben.

Natürlich gelten auch für Arrays, die auf diese Art erzeugt wurden, die gleichen Regeln wie für andere Arrays, z. B. die Zählung beginnend mit 0. Mit Indizes können Sie nun auf die einzelnen Teilstrings des Arrays zugreifen.

var zeichenkette = "Dies ist eine Zeichenkette";  
zerlegt = zeichenkette.split(" ");  
document.write("Das 2. Wort lautet: "+zerlegt[1]);

# Zusammenfassung

  • Strings bzw. Zeichenketten sind quasi ein Array aus einzelnen Zeichen. In JavaScript werden sie deshalb als Objekt behandelt. Aus diesem Grund existieren auch verschiedene Methoden, mit denen ein String manipuliert werden kann.
  • Mit der Methode length kann die Länge einer Zeichenkette ermittelt werden.
  • Die Methoden toLowerCase und toUpperCase wandeln eine Zeichenkette entweder in Kleinbuchstaben oder in Großbuchstaben um.
  • Mit der Methode indexOf kann auf das erste Vorkommen eines Zeichens ab einer bestimmten Position geprüft werden.
  • Weitere Methoden geben z. B. einen Teil der Zeichenkette zurück.

# Fragen und Übungen

  1. Schreiben Sie ein Script, das alle deutschen Umlaute einer Zeichenkette durch die entsprechenden HTML-Entities ersetzt. Besonders hilfreich zur Lösung der Aufgabe ist die switch-Anweisung.
  2. Schreiben Sie ein Script, das anhand eines bestimmten Zeichens bzw. einer Zeichenfolge einen String in zwei Teile zerlegt. Der erste String soll dem Teil vom Anfang der Zeichenkette bis zum Beginn der Trennzeichenkette enstprechen und der zweite String dem Teil der Zeichenkette vom Ende der Trennzeichenkette bis zum Ende der Zeichenkette.