trim_suffix
2026/4/14大约 4 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — trim_suffix
trim_suffix
定义
trim_suffix 用来去掉字符串末尾的指定后缀。你可以把它想象成"剪掉绳子末端的标签"——如果绳子最后面挂着指定的标签,就剪掉;如果没有,绳子原样不动。
比如 "player.png".TrimSuffix(".png") 就会变成 "player"。
函数签名
C#
// Godot.StringExtensions 方法
public static string TrimSuffix(this string instance, string suffix)GDScript
func trim_suffix(suffix: String) -> String参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
suffix | string / String | 是 | 要去除的后缀字符串。只有完全匹配末尾时才会去除 |
返回值
类型: string / String
- 如果字符串以
suffix结尾,返回去掉后缀后的新字符串 - 如果不以
suffix结尾,返回原字符串(不做任何修改)
代码示例
基础用法
C#
using Godot;
public partial class TrimSuffixExample : Node
{
public override void _Ready()
{
// 去掉文件扩展名
GD.Print("player.png".TrimSuffix(".png"));
// 运行结果: player
// 后缀不匹配时,原样返回
GD.Print("player.jpg".TrimSuffix(".png"));
// 运行结果: player.jpg
// 去掉路径末尾的斜杠
GD.Print("res://assets/".TrimSuffix("/"));
// 运行结果: res://assets
}
}GDScript
extends Node
func _ready():
# 去掉文件扩展名
print("player.png".trim_suffix(".png"))
# 运行结果: player
# 后缀不匹配时,原样返回
print("player.jpg".trim_suffix(".png"))
# 运行结果: player.jpg
# 去掉路径末尾的斜杠
print("res://assets/".trim_suffix("/"))
# 运行结果: res://assets实际场景:去除文件扩展名和单位后缀
C#
using Godot;
public partial class FileProcessor : Node
{
public override void _Ready()
{
// 批量去除文件扩展名
string[] files = {
"hero.png",
"music.ogg",
"level.tscn",
"data.json"
};
string[] extensions = { ".png", ".ogg", ".tscn", ".json" };
foreach (string file in files)
{
string name = file;
foreach (string ext in extensions)
{
name = name.TrimSuffix(ext);
}
GD.Print($"文件: {file} -> 名称: {name}");
}
// 运行结果:
// 文件: hero.png -> 名称: hero
// 文件: music.ogg -> 名称: music
// 文件: level.tscn -> 名称: level
// 文件: data.json -> 名称: data
// 去掉数值后面的单位
string speed = "120px/s";
string numOnly = speed.TrimSuffix("px/s");
GD.Print($"速度值: {numOnly}");
// 运行结果: 速度值: 120
}
}GDScript
extends Node
func _ready():
# 批量去除文件扩展名
var files := [
"hero.png",
"music.ogg",
"level.tscn",
"data.json"
]
var extensions := [".png", ".ogg", ".tscn", ".json"]
for file in files:
var name := file
for ext in extensions:
name = name.trim_suffix(ext)
print("文件: " + file + " -> 名称: " + name)
# 运行结果:
# 文件: hero.png -> 名称: hero
# 文件: music.ogg -> 名称: music
# 文件: level.tscn -> 名称: level
# 文件: data.json -> 名称: data
# 去掉数值后面的单位
var speed := "120px/s"
var num_only := speed.trim_suffix("px/s")
print("速度值: " + num_only)
# 运行结果: 速度值: 120进阶用法:与 trim_prefix 配合处理标记文本
C#
using Godot;
public partial class TrimSuffixAdvanced : Node
{
public override void _Ready()
{
// 去除 Markdown 加粗标记
string markdown = "**Bold Text**";
string plainText = markdown.TrimPrefix("**").TrimSuffix("**");
GD.Print(plainText);
// 运行结果: Bold Text
// 去除引号包裹
string quoted = "\"Hello World\"";
string unquoted = quoted.TrimPrefix("\"").TrimSuffix("\"");
GD.Print(unquoted);
// 运行结果: Hello World
// 去除括号包裹
string bracketed = "[quest_item]";
string itemName = bracketed.TrimPrefix("[").TrimSuffix("]");
GD.Print($"物品: {itemName}");
// 运行结果: 物品: quest_item
// 注意:只去末尾,不关心中间有没有
string text = "hello.png.backup";
GD.Print(text.TrimSuffix(".png"));
// 运行结果: hello.png.backup(末尾是 .backup,不是 .png,所以不去)
GD.Print(text.TrimSuffix(".backup"));
// 运行结果: hello.png(末尾匹配 .backup,去掉了)
}
}GDScript
extends Node
func _ready():
# 去除 Markdown 加粗标记
var markdown := "**Bold Text**"
var plain_text := markdown.trim_prefix("**").trim_suffix("**")
print(plain_text)
# 运行结果: Bold Text
# 去除引号包裹
var quoted := "\"Hello World\""
var unquoted := quoted.trim_prefix("\"").trim_suffix("\"")
print(unquoted)
# 运行结果: Hello World
# 去除括号包裹
var bracketed := "[quest_item]"
var item_name := bracketed.trim_prefix("[").trim_suffix("]")
print("物品: " + item_name)
# 运行结果: 物品: quest_item
# 注意:只去末尾,不关心中间有没有
var text := "hello.png.backup"
print(text.trim_suffix(".png"))
# 运行结果: hello.png.backup(末尾是 .backup,不是 .png,所以不去)
print(text.trim_suffix(".backup"))
# 运行结果: hello.png(末尾匹配 .backup,去掉了)注意事项
- 只去末尾,只去一次:
trim_suffix只检查字符串的最末尾是否匹配后缀,不会在字符串中间查找和删除。 - 必须完全匹配:后缀必须和字符串末尾完全一致才会去除,哪怕差一个字符也不会去除。
- 区分大小写:
trim_suffix是区分大小写的。"file.PNG".TrimSuffix(".png")不会去除后缀。 - 不修改原字符串:返回新字符串,原字符串保持不变。
- 与
trim_prefix配对:trim_prefix去开头,trim_suffix去末尾。两者配合可以去除字符串首尾的标记。 - C# 的
TrimEnd不同:C# 自带的TrimEnd()是去除字符集中的任意字符,而TrimSuffix要求精确匹配整个后缀字符串。 - 与
get_basename的区别:get_basename只去掉最后的扩展名(最后一个.之后的内容),而trim_suffix可以去掉任意指定的后缀字符串,更灵活。
