GDScript 格式化字符串

GDScript offers a feature called format strings, which allows reusing text templates to succinctly create different but similar strings.

格式化字符串就像正常的字符串,除了他们包含某些占位符字符片段。 这些占位符可以轻易地被传递过来的参数替代。

举一个例子,使用 %s 作为占位符,格式化字符串 "Hello %s, how are you? 可以很容易改为 "Hello World, how are you?" 。注意占位符在字符串的中间,如果不使用格式化字符串去修改这个字符串可能会有点麻烦。(nice design)

在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"

还有其他的 格式说明符, 但只有在使用 % 操作符的情况下才适用。

占位符类型

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

s 简单的字符串转换,通过相同的隐式字符串转换方法。
c 单个 Unicode 字符。对于代码点或单个字符, 需要一个无符号的8位整数 (0-255) 。
d 一个 十进制 整数。 需要一个整数或实数(向下取整)。
o 一个 八进制 整数。 需要一个整数或实数(向下取整)。
x 一个小写字母的 十六进制 整数。 需要一个整数或实数(向下取整)。
X 一个大写字母的 十六进制 整数。 需要一个整数或实数(向下取整)。
f 一个 十进制 实数。 需要一个整数或实数。

占位符的修饰符

这些字符在上述占位符前出现。 其中一些只在特定情况下生效。

+ 用在数字说明符中,如果为正 显示+号 。
Integer 设置 填充 。用空格填充,或如果整数 0 写在一个整数占位符中用0填充。当 . 使用时见 . 。
. ``f``之前,设置 精度 到0位小数。可以跟进数量改变。用零填充。
- 向右填充 而不是向左。
* 动态填充, 期望额外的整数参数来设置填充或 . 后的精度。见 dynamic padding

填充

字符 . (点), * (星号), - (减号) 和 数字 (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 ,仍然可以在整数占位符中填充零:

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

逃脱序列

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

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

格式化方法示例

以下是如何使用 String.format 方法的各种调用的一些示例。

类型 样式 示例 结果
字典 "Hi, {name} v{version}!".format({"name":"Godette", "version":"3.0"}) Hi, Godette v3.0!
字典 索引 "Hi, {0} v{1}!".format({"0":"Godette", "1":"3.0"}) Hi, Godette v3.0!
字典 混合 "Hi, {0} v{version}!".format({"0":"Godette", "version":"3.0"}) Hi, Godette v3.0!
数组 "Hi, {name} v{version}!".format([["version","3.0"], ["name","Godette"]]) Hi, Godette v3.0!
数组 索引 "Hi, {0} v{1}!".format(["Godette","3.0"]) Hi, Godette v3.0!
数组 混合 "Hi, {name} v{0}!".format([3.0, ["name","Godette"]]) Hi, Godette v3.0!
数组 没有索引 "Hi, {} v{}!".format(["Godette", 3.0], "{}") Hi, Godette v3.0!

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

类型 示例 结果
中缀(默认) "Hi, {0} v{1}".format(["Godette", "3.0"], "{_}") Hi, Godette v3.0
后缀 "Hi, 0% v1%".format(["Godette", "3.0"], "_%") Hi, Godette v3.0
前缀 "Hi, %0 v%1".format(["Godette", "3.0"], "%_") Hi, 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.

示例 结果
"Hi, {0} v{version}".format({0:"Godette", "version":"%0.2f" % 3.114}) Hi, Godette v3.11

原文地址:https://www.cnblogs.com/empist/p/10200469.html

时间: 2024-10-10 01:46:53

GDScript 格式化字符串的相关文章

格式化字符串攻击原理及示例

一.类printf函数簇实现原理 类printf函数的最大的特点就是,在函数定义的时候无法知道函数实参的数目和类型. 对于这种情况,可以使用省略号指定参数表. 带有省略号的函数定义中,参数表分为两部分,前半部分是确定个数.确定类型的参数,第二部分就是省略号,代表数目和类型都不确定的参数表,省略号参数表中参数的个数和参数的类型是事先的约定计算出来的,每个实参的地址(指针)是根据确定参数表中最后一个实参的地址算出来的. 这里涉及到函数调用时的栈操作.函数栈的栈底是高地址,栈顶是底地址.在函数调用 时

编写高质量代码改善C#程序的157个建议——建议13: 为类型输出格式化字符串

建议13: 为类型输出格式化字符串 有两种方法可以为类型提供格式化的字符串输出.一种是意识到类型会产生格式化字符串输出,于是让类型继承接口IFormattable.这对类型来 说,是一种主动实现的方式,要求开发者可以预见类型在格式化方面的要求.更多的时候,类型的使用者需为类型自定义格式化器,这就是第二种方法,也是最灵活 多变的方法,可以根据需求的变化为类型提供多个格式化器.下面就来详细介绍这两种方法. 最简单的字符串输出是为类型重写ToString方法,如果没有为类型重写该方法,默认会调用Obj

Python格式化字符串

在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%). 下面整理了一下Python中字符串格式化符合: 格式化符号 说明 %c 转换成字符(ASCII 码值,或者长度为一的字符串) %r 优先用repr()函数进行字符串转换 %s 优先用str()函数进行字符串转换 %d / %i 转成有符号十进制数 %u

格式化字符串攻击

什么是格式化字符串攻击? format string attack https://www.owasp.org/index.php/Format_string_attack 首先攻击发生在 格式化字符串所涉及的函数(例如 printf), 其次用户输入字符串提交后作为格式化字符串参数执行. 攻击者可以执行代码, 读取栈空间. 写栈空间. 导致进行段错误(segment fault),或者导致其他的威胁到计算机安全和稳定性的新的行为. 举例子 正确例子,其中 "Bob %%x %%x"

使用DateTime.Now.ToString("yyyy/MM/dd/")格式化字符串

在一次项目中,偶然发现,把项目移到另一点电脑时 通过DateTime.Now.ToString("yyyy/MM/dd/")格式化字符串时,其字符串格式应为:yyyy-MM-dd 格式化后没有体现出应有的效果! 其原因是:系统时间设置的格式问题 如图: 别人电脑的格式为: 后面把代码改为了直接获取年月日拼接! 如果需要固定格式,可通过正则表达式实现! 使用DateTime.Now.ToString("yyyy/MM/dd/")格式化字符串,布布扣,bubuko.co

iOS 获取当前时间格式化字符串

iOS 获取当前时间格式化字符串 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. // 获取系统当前时间 NSDate * date = [NSDate date]; NSDateFormatt

格式化字符串-提取中文

1.原来的String {'info':[{'menuId':'193','menuName':'家装建材'},{'menuId':'194','menuName':'家纺'},{'menuId':'176','menuName':'手机通讯'},{'menuId':'178','menuName':'手机配件'}]} 要求: 家装建材,家纺,手机通讯,手机配件 /** * 格式化字符串 * @param str * @return */ public String SubString(Stri

Python格式化字符串~转

Python格式化字符串 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作符,非常类似C语言里的printf()函数的字符串格式化(C语言中也是使用%). 下面整理了一下Python中字符串格式化符合: 格式化符号 说明 %c 转换成字符(ASCII 码值,或者长度为一的字符串) %r 优先用repr()函数进行字符串转换 %s 优先用str()函数进行字符串转换 %d / %i

格式化字符串攻击原理及示例.RP

格式化字符串攻击原理及示例 一.类printf函数簇实现原理 类printf函数的最大的特点就是,在函数定义的时候无法知道函数实参的数目和类型. 对于这种情况,可以使用省略号指定参数表. 带有省略号的函数定义中,参数表分为两部分,前半部分是确定个数.确定类型的参数,第二部分就是省略号,代表数目和类型都不确定的参数表,省略号参数表中参数的个数和参数的类型是事先的约定计算出来的,每个实参的地址(指针)是根据确定参数表中最后一个实参的地址算出来的. 这里涉及到函数调用时的栈操作.函数栈的栈底是高地址,