Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
GDScript-Format-Strings
Godot bietet verschiedene Möglichkeiten, den Inhalt von Strings dynamisch zu ändern:
Format-Strings:
var string = "Ich habe %s Katzen." % "3"Die
String.format()-Methode:var string = "Ich habe {0} Katzen.".format([3])Stringverkettung:
var string = "I habe " + str(3) + " Katzen."
Auf dieser Seite wird das Verwenden von Format-Strings erläutert und es wird kurz auf die format()-Methode sowie die Stringverkettung eingegangen.
Format-Strings
Format-Strings sind eine Möglichkeit, Textvorlagen wiederzuverwenden, um auf prägnante Weise unterschiedliche, aber ähnliche Strings zu erstellen.
Format-Strings verhalten sich genau wie normale Strings, enthalten jedoch bestimmte Platzhalter für Zeichenfolgen wie beispielsweise %s. Diese Platzhalter können dann durch Parameter ersetzt werden, die an den Format-String übergeben werden.
Versuchen Sie, das folgende GDScript-Beispiel zu verstehen:
# Define a format string with placeholder '%s'
var format_string = "We're waiting for %s."
# Using the '%' operator, the placeholder is replaced with the desired value
var actual_string = format_string % "Godot"
print(actual_string)
# Output: "We're waiting for Godot."
Platzhalter starten immer mit einem %, aber das nächste oder die nächsten Zeichen, der Formatbezeichner, legt fest, wie der gegebene Wert zu einem String konvertiert wird.
The %s seen in the example above is the simplest placeholder and works for
most use cases: it converts the value by the same method by which an implicit
String conversion or str() would convert
it. Strings remain unchanged, booleans turn into either "true" or "false",
int and float types become decimals, and other types usually return their data
in a human-readable string.
Es gibt noch weitere Formatbezeichner.
Mehrere Platzhalter
Format-Strings können mehrere Platzhalter enthalten. In diesem Fall werden die Werte in der Form eines Arrays gehandhabt, ein Wert pro Platzhalter (außer es wird ein Formatbezeichner mit * genutzt, siehe dynamisches Padding):
var format_string = "%s was reluctant to learn %s, but now he enjoys it."
var actual_string = format_string % ["Estragon", "GDScript"]
print(actual_string)
# Output: "Estragon was reluctant to learn GDScript, but now he enjoys it."
Beachten Sie, dass die Werte der Reihe nach eingefügt werden. Denken Sie daran, dass alle Platzhalter auf einmal ersetzt werden müssen, es muss also eine angemessene Anzahl von Werten vorhanden sein.
Formatbezeichner
Es gibt weitere Formatbezeichner außer s, die in Platzhaltern genutzt werden können. Diese bestehen aus einem oder mehreren Zeichen. Manche funktionieren für sich alleine, wie s, manche stehen vor anderen Zeichen, wieder andere funktionieren in Verbindung mit bestimmten Werten oder Zeichen.
Platzhaltertypen
Einer – und nur einer – dieser Platzhalter-Typen muss immer als letztes Zeichen in einem Formatbezeichner auftreten. Abgesehen von s werden bestimmte Parametertypen benötigt.
|
Einfache Konvertierung von einem String mit der selben Methode, die bei der impliziten String-Konvertierung verwendet wird. |
|
Ein einzelnes Unicode-Zeichen. Akzeptiert einen Unicode-Codepunkt (Ganzzahl) oder einen String mit einem Zeichen. Unterstützt Werte über 255 hinaus. |
|
Eine dezimale Ganzzahl. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine Oktalzahl. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine hexadezimale Ganzzahl mit Kleinbuchstaben. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine hexadezimale Ganzzahl mit Großbuchstaben. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine dezimale reelle Zahl. Erwartet eine ganze oder reelle Zahl. |
|
Ein Vektor. Erwartet ein beliebiges float- oder int-basiertes Vektorobjekt ( |
Platzhalter-Modifikatoren
Diese Zeichen erscheinen vor den oben angegebenen. Einige davon funktionieren nur unter bestimmten Bedingungen.
|
Gibt bei Zahlen-Bezeichnern das ** "+"-Vorzeichen mit an**, falls die Zahl positiv ist. |
Integer |
Padding einstellen. Füllt bei einem Platzhalter für ganze oder reelle Zahlen den String mit Leerzeichen oder Nullen auf, wenn die ganze Zahl mit |
|
Vor |
|
Rechts-Padding statt Links-Padding. |
|
Dynamic padding, expects additional integer parameter to set
padding or precision after |
Padding
Die Zeichen . (Punkt), * (Stern), - (Minuszeichen) und Ziffer (0-9) werden zum Padding verwendet. Auf diese Weise können mehrere Werte vertikal angeordnet werden, als wären sie in einer Spalte, sofern eine Schriftart mit fester Breite verwendet wird.
Um einen String auf eine Minimallänge zu padden, fügen Sie eine Ganzzahl zum Bezeichner hinzu:
print("%10d" % 12345)
# output: " 12345"
# 5 leading spaces for a total length of 10
If the integer starts with 0, integer values are padded with zeroes
instead of white space:
print("%010d" % 12345)
# output: "0000012345"
Precision can be specified for real numbers by adding a . (dot) with an
integer following it. With no integer after ., a precision of 0 is used,
rounding to integer values. The integer to use for padding must appear before
the dot.
# Pad to minimum length of 10, round to 3 decimal places
print("%10.3f" % 10000.5555)
# Output: " 10000.556"
# 1 leading space
Das Zeichen - führt zu einem Rechts-Padding statt einem Links-Padding, was nützlich ist für rechts ausgerichteten Text:
print("%-10d" % 12345678)
# Output: "12345678 "
# 2 trailing spaces
Dynamisches Padding
Mit dem Zeichen * (Stern) kann der Abstand oder die Genauigkeit festgelegt werden, ohne den Formatstring zu ändern. Es wird anstelle einer Ganzzahl im Formatbezeichner verwendet. Die Werte für Padding und Genauigkeit werden dann beim Formatieren übergeben:
var format_string = "%*.*f"
# Pad to length of 7, round to 3 decimal places:
print(format_string % [7, 3, 8.8888])
# Output: " 8.889"
# 2 leading spaces
Es ist weiterhin möglich, Ganzzahl-Platzhalter mit Nullen aufzufüllen, indem 0 vor * eingefügt wird:
print("%0*d" % [2, 3])
# Output: "03"
Escape-Sequenz
Um ein Zeichen % selbst in einen Format-String einzubauen, muss dieses „escaped“ werden, damit es nicht als Platzhalter aufgefasst wird. Dies schafft man durch das Verdoppeln des Zeichens:
var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"
String format method
There is also another way to format text in GDScript, namely the String.format() method. It replaces all occurrences of a key in the string with the corresponding value. The method can handle arrays or dictionaries for the key/value pairs.
Arrays können als Key, Index oder in gemischtem Stil (siehe Beispiele unten) vorkommen. Die Reihenfolge ist nur wichtig, wenn der Index oder der gemischte Stil des Arrays benutzt wird.
Ein kurzes Beispiel in GDScript:
# Define a format string
var format_string = "We're waiting for {str}"
# Using the 'format' method, replace the 'str' placeholder
var actual_string = format_string.format({"str": "Godot"})
print(actual_string)
# Output: "We're waiting for Godot"
Beispiele für Formatierungsmethoden
The following are some examples of how to use the various invocations of the
String.format() method.
Typ |
Stil |
Beispiel |
Ergebnis |
Dictionary |
Key |
|
Hallo, Godette v3.0! |
Dictionary |
Index |
|
Hallo, Godette v3.0! |
Dictionary |
gemischt |
|
Hallo, Godette v3.0! |
Array |
Key |
|
Hallo, Godette v3.0! |
Array |
Index |
|
Hallo, Godette v3.0! |
Array |
gemischt |
|
Hallo, Godette v3.0! |
Array |
kein Index |
|
Hallo, Godette v3.0! |
Platzhalter können auch bei Verwendung von String.format angepasst werden, hier einige Beispiele zu dieser Funktionalität.
Typ |
Beispiel |
Ergebnis |
Infix (Default) |
|
Hallo, Godette v3.0 |
Postfix |
|
Hallo, Godette v3.0 |
Präfix |
|
Hallo, Godette v3.0 |
Es kann sinnvoll sein, die String.format-Methode mit dem %-Operator zu kombinieren, da mit String.format keine Möglichkeit besteht, die Repräsentation von Zahlen zu beeinflussen.
Beispiel |
Ergebnis |
|
Hallo, Godette v3.11 |
Stringverkettung
You can also combine strings by concatenating them together, using the +
operator.
# Define a base string
var base_string = "We're waiting for "
# Concatenate the string
var actual_string = base_string + "Godot"
print(actual_string)
# Output: "We're waiting for Godot"
When using string concatenation, values that are not strings must be converted using
the str() function. There is no way to specify the string format of converted
values.
var name_string = "Godette"
var version = 3.0
var actual_string = "Hi, " + name_string + " v" + str(version) + "!"
print(actual_string)
# Output: "Hi, Godette v3!"
Because of these limitations, format strings or the format() method are often
a better choice. In many cases, string concatenation is also less readable.
Bemerkung
In Godot's C++ code, GDScript format strings can be accessed using the
vformat() helper function in the Variant header.