GDScript formatuje łańcuchy znaków (string)

Godot offers multiple ways to dynamically change the contents of strings:

  • Format strings: var string = "I have %s cats." % "3"

  • The String.format() method: var string = "I have {0} cats.".format([3])

  • String concatenation: var string = "I have " + str(3) + " cats."

This page explains how to use format strings, and briefly explains the format() method and string concatenation.

Format strings

Format strings are a way to reuse text templates to succinctly create different but similar strings.

Format strings are just like normal strings, except they contain certain placeholder character sequences such as %s. These placeholders can then be replaced by parameters handed to the format string.

Przeanalizujemy ten konkretny przykład GDScript:

# 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."

Znaki specjalne zawsze zaczynają się od %, ale następnie musi być znak lub znaki, typ formatu, określa jak dana wartość jest konwertowana do typu string(łańcuch/ciąg znaków).

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", an int or float becomes a decimal, and other types usually return their data in a human-readable string.

There are other format specifiers.

Multiple placeholders

Format strings may contain multiple placeholders. In such a case, the values are handed in the form of an array, one value per placeholder (unless using a format specifier with *, see dynamic 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."

Zauważ, że wartości są wkładane w kolejności. Pamiętaj, że wszystkie symbole zastępcze muszą być zamieniane jednocześnie, więc musi być odpowiednia liczba wartości.

Specyfikatory formatowania

Istnieją specyfikatory formatowania inne niż s które mogą być użyte jako symbole zastępcze. Składają się z jednego lub więcej znaków. Niektóre z nich występują osobno jak s, inne pojawiają się przed innymi znakami, inne działają tylko z konkretnymi wartościami lub znakami.

Typy symboli zastępczych

One and only one of these must always appear as the last character in a format specifier. Apart from s, these require certain types of parameters.

s

Prosta konwersja na String przez tę samą metodę co domniemana konwersja.

c

A single Unicode character. Accepts a Unicode code point (integer) or a single-character string. Supports values beyond 255.

d

A decimal integer. Expects an integer or a real number (will be floored).

o

An octal integer. Expects an integer or a real number (will be floored).

x

A hexadecimal integer with lower-case letters. Expects an integer or a real number (will be floored).

X

A hexadecimal integer with upper-case letters. Expects an integer or a real number (will be floored).

f

A decimal real number. Expects an integer or a real number.

v

A vector. Expects any float or int-based vector object ( Vector2, Vector3, Vector4, Vector2i, Vector3i or Vector4i). Will display the vector coordinates in parentheses, formatting each coordinate as if it was an %f, and using the same modifiers.

Modyfikatory symboli zastępczych

These characters appear before the above. Some of them work only under certain conditions.

+

In number specifiers, show + sign if positive.

Liczba całkowita

Set padding. Padded with spaces or with zeroes if integer starts with 0 in an integer or real number placeholder. The leading 0 is ignored if - is present. When used after ., see ..

.

Before f or v, set precision to 0 decimal places. Can be followed up with numbers to change. Padded with zeroes.

-

Pad to the right rather than the left.

*

Dynamic padding, expects additional integer parameter to set padding or precision after ., see dynamic padding.

Wyrównanie

The . (dot), * (asterisk), - (minus sign) and digit (0-9) characters are used for padding. This allows printing several values aligned vertically as if in a column, provided a fixed-width font is used.

To pad a string to a minimum length, add an integer to the specifier:

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

Znak - spowoduje przesunięcie w prawo, a nie w lewo, przydatne do wyrównania tekstu w prawo:

print("%-10d" % 12345678)
# Output: "12345678  "
# 2 trailing spaces

Dynamiczne wypełnienie

By using the * (asterisk) character, the padding or precision can be set without modifying the format string. It is used in place of an integer in the format specifier. The values for padding and precision are then passed when formatting:

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

It is still possible to pad with zeroes in integer placeholders by adding 0 before *:

print("%0*d" % [2, 3])
# Output: "03"

Escape sequence

To insert a literal % character into a format string, it must be escaped to avoid reading it as a placeholder. This is done by doubling the character:

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.

Tablice mogą być używane jako klucz, indeks, lub w pomieszanym stylu (zobacz poniższe przykłady). Kolejność ma znaczenie tylko wtedy, gdy tablica jest użyta jako indeks lub w pomieszanym stylu.

Krótki przykład w 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"

Format method examples

The following are some examples of how to use the various invocations of the String.format() method.

Typ

Styl

Przykład

Wynik

Słownik

klucz

"Hi, {name} v{version}!".format({"name":"Godette", "version":"3.0"})

Hej, Godette v3.0!

Słownik

indeks

"Hi, {0} v{1}!".format({"0":"Godette", "1":"3.0"})

Hej, Godette v3.0!

Słownik

połączyć

"Hi, {0} v{version}!".format({"0":"Godette", "version":"3.0"})

Hej, Godette v3.0!

Tablica

klucz

"Hi, {name} v{version}!".format([["version","3.0"], ["name","Godette"]])

Hej, Godette v3.0!

Tablica

indeks

"Hi, {0} v{1}!".format(["Godette","3.0"])

Hej, Godette v3.0!

Tablica

połączyć

"Hi, {name} v{0}!".format(["3.0", ["name","Godette"]])

Hej, Godette v3.0!

Tablica

no index

"Hi, {} v{}!".format(["Godette", "3.0"], "{}")

Hej, Godette v3.0!

Placeholders can also be customized when using String.format, here's some examples of that functionality.

Typ

Przykład

Wynik

Infix (default)

"Hi, {0} v{1}".format(["Godette", "3.0"], "{_}")

Hej, Godette v3.0

Postfiks

"Hi, 0% v1%".format(["Godette", "3.0"], "_%")

Hej, Godette v3.0

Przedrostek

"Hi, %0 v%1".format(["Godette", "3.0"], "%_")

Hej, Godette v3.0

Combining both the String.format method and the % operator could be useful, as String.format does not have a way to manipulate the representation of numbers.

Przykład

Wynik

"Hi, {0} v{version}".format({0:"Godette", "version":"%0.2f" % 3.114})

Hej, Godette v3.11

String concatenation

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.

Informacja

In Godot's C++ code, GDScript format strings can be accessed using the vformat() helper function in the Variant header.