GDScript 格式字符串
GDScript提供了一个名为 格式字符串 的功能,该功能允许重用文本模板来简洁地创建格式相似,内容可变的字符串。
格式字符串与普通字符串一样,只不过会包含某些占位符字符序列。这些占位符可以轻松地替换为传递给格式字符串的参数。
例如,以 %s
作为占位符,格式字符串 "你好 %s,吃了吗?
可以很轻易地更改为 "你好世界,吃了吗?"
。注意:占位符在字符串中间,在不使用格式字符串的情况下进行修改可能会很麻烦。
在 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
是最简单的占位符,适用于大多数场合,用与隐式 String
转型相同的方法或 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"
还有其他 格式说明符,仅在使用 %
运算符时适用。
多个占位符
格式字符串也可以包含多个占位符,在这种情况下,传入的值将以数组的形式进行处理,每个占位符为一个数组元素(除非使用带 *
的格式说明符,参见 动态填充):
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
外,其它格式说明符还需要特定类型的参数。
| 通过与隐式 |
| 单个 Unicode 字符 . 对于代码点或单个字符, 需要一个无符号的8位整数(0-255). |
| 一个 十进制 整数. 需要一个整数或实数(向下取整). |
| 一个 八进制 整数. 需要一个整数或实数(向下取整). |
| 一个 小写 字母的 十六进制 整数. 需要一个整数或实数(向下取整). |
| 一个 大写 字母的 十六进制 整数. 需要一个整数或实数(向下取整). |
| 一个十进制实数。需要一个整数或实数。 |
| A vector. Expects any float or int-based vector object ( |
占位符的修饰符
这些字符在上述占位符前出现. 其中一些只在特定情况下生效.
| 用在数字说明符中,如果为正数则显示 + 号。 |
整数 | 设置填充。用空格填充,如果整数或实数占位符的整数部分以 |
| Before |
| 在右侧填充而不是左侧。 |
| 动态填充,期望存在额外的整数参数,用以设置填充或 |
填充
字符 .
(句号), *
(星号), -
(减号)和数字(0
-9
)用于填充. 这允许竖直对齐打印几个值, 就像在一列中使用提供固定宽度的字体一样.
要使字符串满足一个最小长度, 需要在标识符前添加一个整数:
print("%10d" % 12345)
# output: " 12345"
# 5 leading spaces for a total length of 10
如果这个整数以 0
开头, 那么整数值将用0填充, 而不是空格:
print("%010d" % 12345)
# output: "0000012345"
可以通过添加 .
(点)并后跟一个整数来指定实数的精度. .
后没整数时, 精度为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
, 仍然可以在整数占位符中填充0:
print("%0*d" % [2, 3])
# Output: "03"
转义序列
要将文字 %
字符插入格式字符串中, 必须对其进行转义以避免将其读取为占位符. 这是通过将字符加倍来完成的:
var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"
格式方法示例
以下是如何使用 String.format
方法的各种调用的一些示例.
类型 | 样式 | 示例 | 结果 |
字典 | 键 |
| Hi, Godette v3.0! |
字典 | 索引 |
| Hi, Godette v3.0! |
字典 | 混合 |
| Hi, Godette v3.0! |
数组 | 键 |
| Hi, Godette v3.0! |
数组 | 索引 |
| Hi, Godette v3.0! |
数组 | 混合 |
| Hi, Godette v3.0! |
数组 | 没有索引 |
| Hi, Godette v3.0! |
使用 String.format
时, 也可以自定义占位符, 这是该功能的一些示例.
类型 | 示例 | 结果 |
中缀(默认) |
| Hi, Godette v3.0 |
后缀 |
| Hi, Godette v3.0 |
前缀 |
| Hi, Godette v3.0 |
结合 String.format
方法和 %
运算符可能很有用, 因为 String.format
没有办法操纵数字的表示.
示例 | 结果 |
| Hi, Godette v3.11 |