gdscript格式字符串

gdscript提供了一个名为 格式串 它允许重用文本模板简洁地创建不同但相似的字符串。

格式字符串与普通字符串一样,只是它们包含某些占位符字符序列。然后,这些占位符可以很容易地替换为传递给格式字符串的参数。

例如, %s 作为占位符,格式字符串 "Hello %s, how are you? 可轻松更改为 "Hello World, how are you?" . 请注意,占位符位于字符串的中间;如果不使用格式字符串修改它,可能会很麻烦。

gdscript中的用法

检查这个具体的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."

占位符总是以 % 但是下一个字符 格式限定符 ,确定如何将给定值转换为字符串。

这个 %s 在上面的示例中看到的是最简单的占位符,适用于大多数用例:它通过隐式字符串转换或 str() 会转换它。字符串保持不变,布尔值变为 "True""False" 整数或实数变为十进制,其他类型通常以可读字符串返回其数据。

在gdscript中还有另一种格式化文本的方法,即 String.format() 方法。它用相应的值替换字符串中出现的所有键。该方法可以处理键/值对的数组或字典。

数组可以用作键、索引或混合样式(参见下面的示例)。只有在使用索引或混合类型的数组时,顺序才重要。

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 specifiers ,但它们仅适用于使用 % 操作员。

多个占位符

格式字符串可以包含多个占位符。在这种情况下,值以数组的形式传递,每个占位符一个值(除非使用格式说明符 *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."

请注意,值是按顺序插入的。请记住,必须同时替换所有占位符,因此必须有适当数量的值。

格式说明符

除了 s 可以在占位符中使用。它们由一个或多个字符组成。他们中的一些人自己工作就像 s ,有些出现在其他字符之前,有些只使用某些值或字符。

占位符类型

其中一个且只有一个必须始终作为格式说明符中的最后一个字符出现。除了 s ,这需要某些类型的参数。

s

简单的 通过与隐式字符串转换相同的方法转换为字符串。

c

单一的 Unicode字符 . 代码点或单个字符串需要一个无符号8位整数(0-255)。

d

A 十进制积分 数字。需要整数或实数(将被铺平)。

o

八进制积分 数字。需要整数或实数(将被铺平)。

x

A 十六进制积分 数字 lower-case 信件。需要整数或实数(将被铺平)。

X

A 十六进制积分 数字 upper-case 信件。需要整数或实数(将被铺平)。

f

A 十进制实数 数字。需要整数或实数。

占位符修饰符

这些字符出现在上面的前面。其中一些只在特定条件下工作。

+

在数字说明符中, 显示+符号 如果是肯定的。

整数

集合 衬垫 . 如果整数以空格开头,则用空格或零填充 0 在整数占位符中。之后使用时 .. .

.

之前 f ,集合 精度 小数点后0位。可以使用数字进行后续更改。用零填充。

-

右边的垫子 而不是左边。

*

动态填充 ,需要额外的整型参数来设置后面的填充或精度 .dynamic padding .

衬垫

这个 .dot*星号-减号 )和数字 (0 -`` 9``)字符用于填充。这允许打印多个垂直对齐的值,就像在列中一样,前提是使用固定宽度的字体。

要将字符串填充到最小长度,请向说明符添加一个整数:

print("%10d" % 12345)
# output: "     12345"
# 5 leading spaces for a total length of 10

如果整数以 0 ,整数值用零代替空格填充:

print("%010d" % 12345)
# output: "0000012345"

通过添加一个 .dot )后面跟着一个整数。后面没有整数 . ,精度为0,四舍五入为整数值。用于填充的整数必须出现在点之前。

# Pad to minimum length of 10, round to 3 decimal places
print("%10.3f" % 10000.5555)
# Output: " 10000.556"
# 1 leading space

这个 - 字符将导致向右填充而不是向左填充,这对于右文本对齐很有用:

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

动态填充

通过使用 *星号 )字符,可以在不修改格式字符串的情况下设置填充或精度。它用于代替格式说明符中的整数。然后在格式化时传递填充和精度的值:

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

在整数占位符中仍然可以用零填充,方法是添加 0 之前 *

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

转义序列

插入文字 % 字符转换为格式字符串,必须对其进行转义,以避免将其作为占位符读取。这是通过将字符加倍来完成的:

var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"

格式方法示例

下面是一些如何使用 String.format 方法。

Type

风格

例子

结果

词典

钥匙

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

嗨,戈黛特3.0版!

词典

指数

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

嗨,戈黛特3.0版!

词典

混合

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

嗨,戈黛特3.0版!

数组

钥匙

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

嗨,戈黛特3.0版!

数组

指数

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

嗨,戈黛特3.0版!

数组

混合

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

嗨,戈黛特3.0版!

数组

无索引

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

嗨,戈黛特3.0版!

也可以在使用时自定义占位符 String.format ,下面是该功能的一些示例。

Type

例子

结果

中缀(默认)

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

你好,戈黛特3.0版

后缀

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

你好,戈黛特3.0版

前缀

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

你好,戈黛特3.0版

两者结合 String.format 方法与 % 操作员可能很有用,例如 String.format 无法操作数字的表示。

例子

结果

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

你好,戈黛特v3.11