Advanced Strings & Builtins
Template Strings
Bisher haben wir Strings immer nur fest aufgeschrieben und ausgegeben. Häufig will man aber Strings dynamisch aus Daten zusammenbauen. Eventuell habt ihr das auch schon gedacht, wenn wir Sachen in der Konsole in mehreren Zeilen ausgegeben haben, die viel schöner auf einer Zeile als ganzer Satz gewesen wären.
Um Strings dynamisch zusammenzubauen, gibt es sogenannte Template Strings. Template Strings werden wie normale Strings geschrieben, mit zwei Änderungen:
- Statt
""werden sie mit `` geschrieben - Mitten in dem String können andere Werte eingesetzt werden, indem man sie mit
${}umschließt
Ein Beispiel:
const name = "Jane"
const goodMorning = `Guten Morgen ${name}, ich hoffe, du hast gut geschlafen`
console.log(goodMorning)
gibt
Guten Morgen Jane, ich hoffe, du hast gut geschlafen
aus.
Es können dabei beliebig viele ${} vorkommen und in ihnen können beliebige Werte stehen:
const name = "Mischa"
const birthYear = 1993
const currentYear = 2024
console.log(
`${name} ist im Jahr ${birthYear} geboren und ist damit im Jahr ${currentYear} ${currentYear - birthYear} Jahre alt`,
)
gibt
Mischa ist im Jahr 1993 geboren und ist damit im Jahr 2024 31 Jahre alt,
aus.
Template Strings sind also eine Art, Strings zusammenbauen, indem man sie wie eine Art Lückentext schreibt und beliebige Werte in die Lücken einsetzt.
Special Characters & Escaping
Es gibt ein paar besondere Zeichen, die ihr in eure Strings einbauen könnt:
\nfür einen Zeilenumbruch\"für ein"\\für ein\
console.log('Was ist grün und kreist um die Erde?\nEin "Salatelit".')
gibt
Was ist grün und kreist um die Erde?
Ein "Salatelit".
aus.
Builtin String Methods
In Javascript gibt es eine ganze Menge sogenannter builtin Methods. Einee Method ist eine spezielle Art einer Funktion, die auf einem Wert liegt und auf diesen zugreift. Das klingt sehr abstrakt, heißt aber nur, dass man auf manchen Werten mit einem . getrennt auf bestimmte nützliche Dinge zugreifen kann:
// Funktion die zurückgibt, ob beide übergebenen Heldennamen mit "Green" anfangen
function bothHeroesAreGreen(firstHero, secondHero) {
const firstGreen = firstHero.startsWith("Green")
const secondGreen = secondHero.startsWith("Green")
return firstGreen & secondGreen
}
console.log(bothHeroesAreGreen("Green Lantern", "Green Hulk")
console.log(bothHeroesAreGreen("Thor", "Green Hulk")
gibt
true
false
aus.
.startsWith(string) (returnt Boolean)
.startsWith ist eine builtin Methode auf Strings, welche einen anderen String annimmt und zurückgibt, ob der String auf dem man sie aufgerufen hat mit dem übergebenen String beginnt oder nicht.
console.log("Black Widow".startsWith("Black"))
console.log("Spider Man".startsWith("Ven"))
gibt
true
false
aus.
.endsWith(string) (returnt Boolean)
.endsWith ist das Gegenstück zu startsWith, nur, dass das Ende des Strings geprüft wird.
console.log("Thor".endsWith("or"))
console.log("Starlord".endsWith("Star"))
gibt
true
false
.includes(string) (returnt Boolean)
.includes prüft, ob der übergebene String irgendwo im String auf dem aufgerufen wurde enthalten ist.
console.log("Loki".includes("ok"))
console.log("Groot".includes("or"))
gibt
true
false
aus.
.indexOf(string) (returnt Number)
.indexOf sucht ähnlich wie .includes nach dem übergebenen String. Falls es ihn findet, gibt es zurück, beim wievielten Zeichen er gefunden wurde (die Zählung beginnt dabei mit 0). Wenn er nicht gefunden wird, wird -1 zurückgegeben.
console.log("Black Panther".indexOf("ack"))
console.log("Jessica Jones".includes("Jess"))
console.log("Captain Marvel".includes("asdf"))
gibt
2
0
-1
aus.
.substring(number, number) (returnt string)
.substring erwartet eine Startstelle und eine Endstelle. Es schneidet dann den angegebenen Ausschnitt aus dem String auf dem es aufgerufen wird aus und gibt den ausgeschnittetnen String zurück. Die Stellen werden dabei als Zahl angegeben, die Zählung startet mit 0.
console.log("Iron Man".substring(0, 4))
console.log("Wolverine".substring(2, 7))
console.log("Captain America".substring(6, 10))
gibt
Iron
lveri
n Am
aus.
Die Stellenangaben die .substring erwartet sind verhalten sich jeweils leicht anders - die Startangabe ist inklusiv, das heißt das Zeichen an der Stelle ist das erste Zeichen im ausgeschnittenen Wert. Das Zeichen an der Endangabe ist nicht das letzte Zeichen, sondern das erste, das fehlt.
In anderen Worten: .substring(1, 4) heißt nimm die Zeichen von inklusive Stelle 1 bis exklusive Stelle 4 oder nimm die Zeichen an Stelle 1, 2 und 3
Builtin String Properties
Zusätzlich zu builtin Methods gibt es auch noch sogenannte builtin Properties. Diese funktionieren genauso, sind aber keine Funktionen sondern direkt feste Werte.
.length
Auf Strings gibt es die .length Property, welche die Länge des Strings als Zahl enthält:
console.log("Ant Man".length)
console.log("".length)
console.log("Hessische Schülerakademie".length)
gibt
7
0
15
aus.
Builtin console Methods
Wir haben bisher häufig console.log benutzt. Jetzt wissen wir ein wenig mehr darüber, was das ist - console ist ein immer global vorhandener Wert der die Konsole repräsentiert, in der das Programm läuft. console hat mehrere builtin Methods, under andere. .log, welche wir für unsere Programme nutzen um Ausgaben zu erzeugen. Es gibt auch noch einige andere builtins auf console, welche aber für unseren Kurs erstmal noch nicht relevant sind.
Übung
Anrede kürzen
Schreibe eine Funktion removeSalutation(name) und exportiere sie. Sie soll aus einem vollen Namen die Anrede wegkürzen und das Ergebnis returnen. Das heißt, dass deine Funktion einen String bekommt und falls dieser mit "Hr. " oder "Fr. " anfängt, ssoll diese Anrede weggekürzt werden, so dass nur der Name selbst übrig bleibt. Falls nicht, soll der String unberührt returnt werden. Deine Funktion sollte sich so verhalten:
"Fr. Black Widow"wird zu"Black Widow""Hr. Hulk"wird zu"Hulk""Thor"wird zu"Thor"
Entfernen von beliebigem String
Schreibe eine exportierte Funktion removeString(subject, needle), welche zwei Strings erwartet. Sie soll im ersten übergebenen String alle Vorkommnisse des zweite übergebenen Strings entfernen und den resultierenden String zurückgeben. Benutze dabei nur die auf dieser Seite beschriebenen builtins. Deine Funktion sollte sich folgendermaßen verhalten:
("FooBarFoo", "Foo")wird zu"Bar"("Man darf auf der Akademie nicht Geschi sagen", "Geschi")wird zu"Man darf auf der Akademie nicht sagen"("Info ist der beste Kurs", "Mathe")wird zu"Info ist der beste Kurs"