GDScript 入门笔记(十三):字符串操作

📅 发布时间:2026/9/8 16:42:41
GDScript 入门笔记(十三):字符串操作 写游戏逻辑时字符串处理无处不在。显示玩家名字、拼接提示文本、解析配置文件、处理用户输入都离不开对字符串的各种操作。GDScript 的字符串和 Python 很像但有一些自己的方法和习惯。这篇笔记把我常用的字符串操作整理出来覆盖实际开发中会遇到的场景。一、字符串的创建字符串用双引号或单引号创建两者完全等价看个人习惯。我习惯用双引号因为和大多数语言一致。var name Tom var msg 你好 var empty 多行字符串GDScript 用三个双引号或三个单引号创建多行字符串var description 这是第一行 这是第二行 这是第三行 多行字符串会保留换行符。注意开头和结尾的换行也会被包含进去所以通常会在三引号后直接换行让内容从下一行开始。转义字符字符串里可以使用转义字符表示特殊符号转义含义\n换行\t制表符\双引号\单引号\\反斜杠var text 第一行\n第二行 print(text) # 输出 # 第一行 # 第二行二、字符串拼接用 拼接最简单直接的方式var first_name Tom var last_name Smith var full_name first_name last_name print(full_name) # Tom Smith注意只能拼接字符串不能直接拼数字。如果要把数字拼进去必须先用str()转换var score 100 var text 分数 str(score) print(text) # 分数100用 追加var text Hello text World text ! print(text) # Hello World!性能提醒在循环里频繁用拼接字符串会产生大量临时对象影响性能。如果需要大量拼接建议用数组收集最后用join()合并或者用格式化字符串。三、字符串格式化1. 用 % 格式化这是我最常用的方式类似 Python 的%格式化。用%加占位符后面跟上参数数组。var name Tom var score 85 var text 玩家 %s 得了 %d 分 % [name, score] print(text) # 玩家 Tom 得了 85 分占位符类型占位符含义%s字符串任何类型都会转成字符串%d整数%f浮点数%x十六进制整数%c单个字符%f可以指定小数位数var pi 3.1415926 print(%.2f % pi) # 3.14多个占位符时参数用数组按顺序传入。如果只有一个占位符可以不用数组直接传值print(分数%d % score)2. 用 format() 方法format()方法用{}作为占位符参数传入数组。var text 玩家 {0} 得了 {1} 分.format([name, score]) print(text) # 玩家 Tom 得了 85 分占位符里的数字表示参数数组的下标。也可以使用命名参数var text {player_name} 有 {hp} 点生命值.format({ player_name: Tom, hp: 100 }) print(text) # Tom 有 100 点生命值format()的可读性比%更好尤其是参数多的时候。不过%写起来更短两者都可以用选一个自己喜欢并保持统一就行。四、常用字符串方法GDScript 的String类型内置了大量方法下面是我常用的。1. length() 获取长度var text Hello print(text.length()) # 5注意是方法不是属性要加括号。中文也按单个字符计算var text 你好 print(text.length()) # 22. contains() 判断是否包含var text Hello World if text.contains(World): print(包含 World)3. starts_with() 和 ends_with()判断字符串是否以指定前缀开头或后缀结尾。var filename player.tscn if filename.ends_with(.tscn): print(是场景文件) if filename.starts_with(player): print(是玩家相关文件)4. substr() 截取子串substr(开始下标, 长度)返回指定范围的子串。var text Hello World var sub text.substr(6, 5) # 从下标 6 开始取 5 个字符 print(sub) # World如果省略长度截取到末尾var sub text.substr(6) print(sub) # World5. find() 和 rfind() 查找子串返回第一个匹配的下标找不到返回-1。var text Hello World print(text.find(o)) # 4 print(text.find(World)) # 6 print(text.find(xyz)) # -1rfind()从后往前找print(text.rfind(o)) # 76. split() 分割按指定分隔符把字符串拆成数组。var text apple,banana,orange var parts text.split(,) print(parts) # [apple, banana, orange]如果不传参数按空白字符分割var text Tom Jerry Anna var parts text.split() print(parts) # [Tom, Jerry, Anna]7. replace() 替换把字符串中所有匹配的部分替换成新内容。var text Hello World var new_text text.replace(World, Godot) print(new_text) # Hello Godot8. strip_edges() 去除首尾空白去除字符串开头和结尾的空格、制表符、换行等。var input 玩家输入 var cleaned input.strip_edges() print(cleaned) # 玩家输入如果只想去除一侧用lstrip()或rstrip()。9. to_upper() 和 to_lower() 大小写转换var text Hello print(text.to_upper()) # HELLO print(text.to_lower()) # hello10. is_valid_int() 和 is_valid_float()判断字符串能否转换成数字在用户输入处理时很有用。var input 123 if input.is_valid_int(): var num int(input) print(转换成功:, num) else: print(不是有效整数)五、字符串与数字互转数字转字符串用str()函数或者用格式化var num 100 var text1 str(num) # 100 var text2 %d % num # 100字符串转数字用int()或float()但要注意转换失败会报错。所以先用is_valid_int()或is_valid_float()判断var text 42 if text.is_valid_int(): var num int(text) print(num * 2) # 84六、字符串比较字符串可以直接用、!、、比较。比较规则按字符编码逐位比较。var a apple var b banana if a b: print(apple 在 banana 前面) # 按字母顺序注意字符串比较是区分大小写的Apple和apple不相等。需要忽略大小写比较时先统一转成小写或大写。if a.to_lower() b.to_lower(): print(忽略大小写相等)七、遍历字符串中的字符字符串可以直接用for循环遍历每次得到一个字符var text Godot for c in text: print(c) # 输出 # G # o # d # o # t如果需要把字符存入数组可以使用split()但会包含首尾空字符串需要过滤或者直接用循环添加到数组。数组转字符串join()方法把字符串数组用指定分隔符连接成字符串var words [Godot, is, awesome] var sentence .join(words) print(sentence) # Godot is awesome var csv ,.join(words) print(csv) # Godot,is,awesomejoin()是数组的方法分隔符写在前面数组作为调用者。这个写法可能有点反直觉但用几次就习惯了。八、字符串与其他类型的拼接除了str()转换后拼接也可以直接用格式化这样不用手动转换var hp 100 var max_hp 120 var text 生命值%d / %d % [hp, max_hp] print(text) # 生命值100 / 120或者在print()里直接用逗号分隔多个值print(生命值, hp, /, max_hp)print()会自动把多个参数转成字符串并用空格连接调试时特别方便。九、实战解析简单的配置行假设有一个配置文件每行是键值的格式我们可以用字符串方法解析var config_line player_speed200 var parts config_line.split() if parts.size() 2: var key parts[0] var value parts[1] if value.is_valid_float(): var speed float(value) print(配置, key, , speed) else: print(值不是有效数字) else: print(格式错误)这个例子用到了split()、is_valid_float()、float()是实际项目中处理文本配置的典型方式。十、总结字符串操作是日常开发中非常高频的技能GDScript 的String类型提供了丰富的方法。重点掌握拼接、大量拼接时用数组join()格式化%和format()选一个坚持用查找contains()、find()、rfind()截取和分割substr()、split()修改replace()、strip_edges()、to_upper()、to_lower()转换str()、int()、float()配合is_valid_int()等判断建议把这些方法自己跑一遍尤其是split()和join()它们是处理文本数据的基础。