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 |
GDScript 格式化字符串的更多相关文章
- VBA 格式化字符串 - Format大全
VBA 格式化字符串 VBA 的 Format 函数与工作表函数 TEXT 用法基本相同,但功能更加强大,许多格式只能用于VBA 的 Format 函数,而不能用于工作表函数 TEXT ,以下是本人归 ...
- Python中用format函数格式化字符串
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 语法:%[( ...
- C#定义类型转化 及 格式化字符串
operator 关键字 operator 关键字用来重载内置运算符,或提供类/结构声明中的用户定义转换.它可以定义不同类型之间采用何种转化方式和转化的结果. operator用于定义类型转化时可采用 ...
- 关于printf错用格式化字符串导致double和long double输出错误的小随笔
[题外话] 以前用HUSTOJ给学校搭建Online Judge,所有的评测都是在Linux下进行的.后来为了好往学校服务器上部署,所以大家重新做了一套Online Judge,Web和Judge都是 ...
- .NET中DateTime.Now.ToString的格式化字符串
.NET中DateTime.Now.ToString显示毫秒:DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") DateTime.N ...
- Python格式化字符串~转
Python格式化字符串 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作 ...
- %----format 格式化字符串---- 生成器---- 迭代器
%方式格式化字符串 顺序传参数 o转换8进制x转换十六进制 tp1 = "i am %s" % "alex"tp2 = "i am %s age %d ...
- 飘逸的python - 增强的格式化字符串format函数
自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和 ...
- Python格式化字符串和转义字符
地址:http://blog.chinaunix.net/uid-20794157-id-3038417.html Python格式化字符串的替代符以及含义 符 号 说 明 ...
随机推荐
- java面试中被问到的问题
技术面 1) Spring 的注解有哪些? 2) 你如何理解 spring IOC 技术,如果不使用spring,你有哪些方式来加载 bean? 3) spring aop 的原理是什么?它是怎样一 ...
- Ubuntu命令行快捷启动Matlab
转载:https://blog.csdn.net/striker_v/article/details/52884485 Matlab R2015b默认安装目录/usr/local/MATLAB/R20 ...
- 蜕变成蝶~Linux设备驱动之中断与定时器
“我叮咛你的 你说 不会遗忘 你告诉我的 我也全部珍藏 对于我们来说 记忆是飘不落的日子 永远不会发黄 相聚的时候 总是很短 期待的时候 总是很长 岁月的溪水边 捡拾起多少闪亮的诗行 如果你要想念我 ...
- 最新最全的Java面试题整理(内附答案)
Java基础知识篇 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采用面向过程开发, ...
- mysql问题解决SELECT list is not in GROUP BY clause and contains nonaggregated column
今天在Ubuntu下的部署项目,发现一些好好的列表页面发生 :Expression # of SELECT list is not in GROUP BY clause and contains no ...
- C#串口小助手
做技术的通病,什么都想学,什么都想亲手做一遍.不然总感觉心里不踏实. 考研期间,利用晚上一点时间,照葫芦画瓢,练习使用c#快速开发一个简单的串口小助手. 这种前后端分离的设计方法,大大提高了开发速度, ...
- codeforces 1106 E
显然是dp啊,dp[i][j]表示到时间i打扰了j次的最小收益 显然要排序,官方题解说set没看懂,优先队列就行啊. 按照时间排序,显然这样扫的话可以保证当前时间点的点在优先队列里吧, 然后有打断和不 ...
- dll注入遇到CreateRemoteThread()返回错误代码5
在进行dll注入的时候,发现触发了CreateRemoteThread()的错误并返回错误代码5,刚开始以为权限不够,用了管理员权限和加了SetPrivilege()函数提权和用NtCreateThr ...
- Eclipse使当前项目依赖另一个项目
实例说明 在Eclipse中可以创建多个项目实现不同的软件开发,也可以使用多个项目来开发单独的大型软件,每个项目负责单独的模块部门,这样可以使软件的模块分类更清晰,可以单独的维护每个模块部分.但是项目 ...
- ThinkPHP 缓存技术详解 使用大S方法
如果没有缓存的网站是百万级或者千万级的访问量,会给数据库或者服务器造成很大的压力,通过缓存,大幅减少服务器和数据库的负荷,假如我们把读取数据的过程分为三个层,第一个是访问层,第一个是缓存层,第三个是数 ...