< Variable Variablen | Übersicht | Zahlenspiele >
Nachdem wir uns das letzte mal Variablen angesehen haben, soll es heute um zwei bestimmte Typen von Variablen gehen: Zeichen und Zeichenketten.
Noch einmal kurz zur Wiederholung: Variablen sind vereinfacht gesagt, Dinge die sich ein Computer merken kann, mit einem Namen, damit man sie leichter ansprechen kann.
Ein Zeichen kann erstmal alles Mögliche sein: der Buchstabe M
, die Zahl 5
, das Zeichen 書
oder sogar ein Zeilenumbruch. Und was ist mit der Zahl 42
? Ist das auch ein Zeichen?
Natürlich nicht, die 42
sind zwei zusammengesetzte Zeichen, also eine Zeichenkette.
Zeichen
Möchte man nun eine Variable vom Typ Zeichen definieren, so kann das so aussehen:
char startingLetter = 'M';
char
ist die Abkürzung für Character - also Zeichen. Damit sagen wir dem Computer, dass es sich um ein Zeichen handelt, das hier gespeichert werden soll.
Die Variable bekommt nun den Namen startingLetter
und den Wert M
. Wichtig ist, dass das M in einfachen Anführungszeichen steht - das ist auch ein Merkmal von Zeichen. (Die einfachen Anführungszeichen findet ihr über dem Rautezeichen)
Zeichenketten
Möchte man eine Zeichenkette definieren, dann kann das so aussehen:
string name = "Wurstsalat";
Der Variablentyp ist diesesmal string
(zu deutsch: Zeichenkette). Wichtig ist hier, dass ihr doppelte Anführungszeichen verwendet. Grundsätzlich ist alles, was zwischen zwei doppelten Anführungszeichen steht eine Zeichenkette.
Aber was ist zum Beispiel hiermit:
string identifier = "W";
Ist das auch schon eine Zeichenkette, da steht ja nur ein Zeichen drin? Ja, auch das ist eine Zeichektte, allerdings eine mit der Länge 1. Ebenso ist es auch möglich eine leere Zeichenkette zu haben:
string street = "";
Eingaben
Schön, jetzt wissen wir schon mal, dass es Zeichen und Zeichenketten gibt, aber was bringt uns das? Nun alles was der Nutzer eingibt ist erstmal ein Zeichen oder eine Zeichenkette. Selbst wenn er 54
eingibt ist das technisch gesehen erstmal nur eine Aneinanderreihung von Zeichen und keine Zahl.
Aber wie lässt man den Nutzer nun etwas eingeben? Den befehl für die Ausgabe kennen wir schon, das war ja
Console.WriteLine("Wie ist dein Name?");
Hier seht ihr auch schon wieder die doppelten Anführungszeichen, der Text ist also auch nichts anderes als eine Zeichenkette.
Der Befehl um eine Zeichenkette einzulesen ist ähnlich:
string name = Console.ReadLine();
Das sagt dem Computer: lege eine Variable vom Typ Zeichenkette an, nenne sie name
und speichere als Wert was auch immer der Nutzer jetzt eingibt bis er Enter drückt.
Zeichenketten verknüpfen
Falls ihr es noch nicht gemacht habt um das bisherige auszuprobieren, dann ist jetzt eine gute Gelegenheit ein neues Projekt anzulegen und folgende Main-Funktion zu schreiben:
static void Main(string[] args)
{
Console.WriteLine("Wie ist dein Name?");
string name = Console.ReadLine();
}
Damit haben wir schon mal den Namen des Benutzers in einer Variable "name" gespeichert. Wie machen wir es aber, wenn wir nun "Hallo <name>!" Ausgeben möchten?
Die einfachste Variante ist es, die Zeichenketten einfach zu "Addieren":
string greetings = "Hallo " + name + "!";
In der Variable greetings
(Begrüßung) steht nun "Hallo <name>!". Diese Variante Zeichenketten zu verknüpfen funktioniert in allen "großen" Programmiersprachen. Ich kenne keine bei der es nicht so geht aber das bedeutet ja nicht, dass es keine gibt 
In C# gibt es noch eine zweite Variante:
string greetings = $"Hallo {name}!";
Wichtig ist hier das String-Zeichen $
am Anfang der Zeichenkette. Daneben gibt es noch weitere Möglichkeiten Zeichenketten zu verknüpfen, aber für den Anfang sind diese beiden völlig ausreichend. Welche Variante ihr am Ende benutzt ist egal, ich benutze meistens die Zweite, da man dort ein paar Zeichen einspart 
Jetzt müssen wir das ganze nur noch ausgeben. Unser Programm sieht am Ende also ungefährt so aus:
static void Main(string[] args)
{
Console.WriteLine("Wie ist dein Name?");
string name = Console.ReadLine();
string greetings = $"Hallo {name}!";
Console.WriteLine();
Console.WriteLine(greetings);
Console.ReadKey();
}
Also wie bisher, erst den Namen erfragen und in die Variable name
speichern. Danach eine neue Variable greetings
anlegen, in der wir den verknüpften Text speichern. Als nächstes geben wir eine leere Zeile aus und danach in einer neuen Zeile den Inhalt der Variable greetings
.
Wenn wir unser Programm nun starten sieht es wie folgt aus:

Was man mit Zeichenketten noch so machen kann
Für Zeichenketten gibt es noch eine Reihe weitere Befehle, zum Beispiel um die Länge einer Zeichenkette zu bestimmen:
int length = name.Length;
Die Länge (Length) einer Zeichenkette ist immer eine Ganzahl, muss also in eine Variable vom Typ int
gespeichert werden. In der steht nun die Länge des Namens, den der Benutzer eingegeben hat.
Achtung: Nach dem Befehl Length
kommen keine Klammern. Das kommt daher, da die Länge eine Eigenschaft der Zeichenkette ist und keine Funktion die irgendwas macht (wie zB ReadLine()
- eine Zeichenkette einlesen).
Einen Teil der Zeichenkette heraustrennen:
string firstLetters = name.Substring(2, 3);
Mit dem Befehl substring(<Anfang>, <Länge>)
lässt sich ein Teil der Zeichenkette heraustrennen. Die erste Zahl ist dabei die Position des ersten Zeichens und die zweite Zahl wie viele Zeichen herausgetrennt werden sollen.
Achtung: Beim Programmieren fängt man immer mit der 0 an zu Zählen. Mit dem Befehl oben erhalte ich bei dem Namen Michael
nicht etwa ich
sondern cha
heraus - M(0) i(1) c(2) h(3) a(4) e(5) l(6)
Achtung: Wenn der Name zu kurz ist, dann stürzt das Programm bei diesem Befehl ab. Gibt der Nutzer also Hans ein, dann ist das erste Zeichen das n
und von da an noch 3 Zeichen, das geht aber nicht, da es keine 3 Zeichen mehr gibt. Wie man damit umgeht klären wir dann, wenn wir zu Bedingungen kommen 
Einen Teil der Zeichenkette ersetzen:
string newName = name.Replace("ch", "sch");
Mit Replace(<alter Text>, <neuer Text>);
lassen sich einzelne Buchstaben oder ganze Zeichenketten ersetzen. Würde ich also Michael als Namen eingeben, dann steht nach diesem Befehl in der Variable newValue
der Name Mischael
. Wichtig, es werden alle Vorkommen ersetzt!
Es gibt noch eine Reihe weiterer Funktionen, das sollte für den Anfang allerdings ausreichend sein.
Was war denn nun mit einzelnen Zeichen?
Es ist euch bestimmt aufgefallen, dass wir in den letzten Abschnitten immer nur von Zeichenketten gesprochen haben und nicht von einzelnen Zeichen. Das liegt einfach daran, dass einzelne Zeichen nicht so oft verwendet werden. Ebenso können Zeichenketten ja auch einfach nur aus einem Zeichen bestehen. Darum hab ich die einfach ausgegrenzt um das Kapitel nicht unnötig aufzublähen. Bei Bedarf kann ich aber auch noch etwas dazu schreiben 
Übungsaufgabe
Da wir ja jetzt die ersten Befehle kennen, können wir auch ein paar Übungsaufgaben machen 
Versucht mal ein Programm zu schreiben, dass einen Namen ausliest, ihn wie oben ausgibt, dann die ersten drei Buchstaben ausgibt und dann die restlichen Buchstaben. Dazu soll es noch schreiben, wie viele Zeichen jeder Teil hat.
Am Ende soll es in etwa so aussehen:

Dazu benötigt man nur die Funktionen von oben und das Wissen, dass man Zahlen subtrahieren kann 