StringName

唯一字符串的内置类型。

描述

StringNames是不可变字符串,设计用于唯一名称的通用表示(也称为“字符串实习”)。具有相同值的两个StringNames是同一个对象。与常规Strings相比,比较它们非常快。

您通常会将String传递给需要StringName的方法,它会被自动转换(通常在编译时),但在极少数情况下,您可以使用StringName构造函数提前构造StringName,或者在S3Script中,使用文字语法和“example”。手动构造StringName允许您控制从String进行转换的时间或使用文字并完全阻止转换。

另请参阅ItemPath,这是一个类似的概念,专门设计用于存储预先解析的场景树路径。

String的所有方法也在此类中可用。它们将StringName转换为字符串,并且还返回一个字符串。这是非常低效的,只能在需要字符串时使用。

注意:在C#中,使用本页列出的方法需要显式转换为System.String。使用ToString()方法将StringName转换为字符串,然后使用System.StringStringExrence中的等效方法。

注意:在布尔上下文中,如果StringName为空(StringName("")),它将评估为false。否则,StringName将始终评估为true

构造函数

方法

bool

begins_with(text: String) const

PackedStringArray

bigrams() const

int

bin_to_int() const

String

c_escape() const

String

c_unescape() const

String

capitalize() const

int

casecmp_to(to: String) const

bool

contains(what: String) const

bool

containsn(what: String) const

int

count(what: String, from: int = 0, to: int = 0) const

int

countn(what: String, from: int = 0, to: int = 0) const

String

dedent() const

bool

ends_with(text: String) const

String

erase(position: int, chars: int = 1) const

int

filecasecmp_to(to: String) const

int

filenocasecmp_to(to: String) const

int

find(what: String, from: int = 0) const

int

findn(what: String, from: int = 0) const

String

format(values: Variant, placeholder: String = "{_}") const

String

get_base_dir() const

String

get_basename() const

String

get_extension() const

String

get_file() const

String

get_slice(delimiter: String, slice: int) const

int

get_slice_count(delimiter: String) const

String

get_slicec(delimiter: int, slice: int) const

int

hash() const

PackedByteArray

hex_decode() const

int

hex_to_int() const

String

indent(prefix: String) const

String

insert(position: int, what: String) const

bool

is_absolute_path() const

bool

is_empty() const

bool

is_relative_path() const

bool

is_subsequence_of(text: String) const

bool

is_subsequence_ofn(text: String) const

bool

is_valid_ascii_identifier() const

bool

is_valid_filename() const

bool

is_valid_float() const

bool

is_valid_hex_number(with_prefix: bool = false) const

bool

is_valid_html_color() const

bool

is_valid_identifier() const

bool

is_valid_int() const

bool

is_valid_ip_address() const

bool

is_valid_unicode_identifier() const

String

join(parts: PackedStringArray) const

String

json_escape() const

String

left(length: int) const

int

length() const

String

lpad(min_length: int, character: String = " ") const

String

lstrip(chars: String) const

bool

match(expr: String) const

bool

matchn(expr: String) const

PackedByteArray

md5_buffer() const

String

md5_text() const

int

naturalcasecmp_to(to: String) const

int

naturalnocasecmp_to(to: String) const

int

nocasecmp_to(to: String) const

String

pad_decimals(digits: int) const

String

pad_zeros(digits: int) const

String

path_join(file: String) const

String

repeat(count: int) const

String

replace(what: String, forwhat: String) const

String

replacen(what: String, forwhat: String) const

String

reverse() const

int

rfind(what: String, from: int = -1) const

int

rfindn(what: String, from: int = -1) const

String

right(length: int) const

String

rpad(min_length: int, character: String = " ") const

PackedStringArray

rsplit(delimiter: String = "", allow_empty: bool = true, maxsplit: int = 0) const

String

rstrip(chars: String) const

PackedByteArray

sha1_buffer() const

String

sha1_text() const

PackedByteArray

sha256_buffer() const

String

sha256_text() const

float

similarity(text: String) const

String

simplify_path() const

PackedStringArray

split(delimiter: String = "", allow_empty: bool = true, maxsplit: int = 0) const

PackedFloat64Array

split_floats(delimiter: String, allow_empty: bool = true) const

String

strip_edges(left: bool = true, right: bool = true) const

String

strip_escapes() const

String

substr(from: int, len: int = -1) const

PackedByteArray

to_ascii_buffer() const

String

to_camel_case() const

float

to_float() const

int

to_int() const

String

to_lower() const

String

to_pascal_case() const

String

to_snake_case() const

String

to_upper() const

PackedByteArray

to_utf8_buffer() const

PackedByteArray

to_utf16_buffer() const

PackedByteArray

to_utf32_buffer() const

PackedByteArray

to_wchar_buffer() const

String

trim_prefix(prefix: String) const

String

trim_suffix(suffix: String) const

int

unicode_at(at: int) const

String

uri_decode() const

String

uri_encode() const

String

validate_filename() const

String

validate_node_name() const

String

xml_escape(escape_quotes: bool = false) const

String

xml_unescape() const

运算符


构造函数说明

StringName StringName() 🔗

构造一个空的StringName


StringName StringName(from: StringName)

构造一个StringName作为给定StringName的副本。


StringName StringName(from: String)

从给定的String创建一个新的StringName。在S3Script中,StringName("example")等价于&"example"


方法说明

bool begins_with(text: String) const 🔗

如果字符串以给定的text开头,则返回true。另请参见ends_with()


PackedStringArray bigrams() const 🔗

返回一个数组,其中包含此字符串的双字母组(连续字符对)。

print("Get up!".bigrams()) # 输入 ["Ge", "et", "t ", " u", "up", "p!"]

int bin_to_int() const 🔗

将表示二进制数的字符串转换为int。该字符串可以选择以"0b"为前缀,负数还可以额外加一个-前缀。

print("101".bin_to_int())   # 输入 5
print("0b101".bin_to_int()) # 输入 5
print("-0b10".bin_to_int()) # 输入 -2

String c_escape() const 🔗

返回使用C语言标准转义的特殊字符的字符串副本。


String c_unescape() const 🔗

返回一个字符串副本,其中转义字符被替换为其对应的实际字符。支持的转义序列有\'\"\\\a\b\f\n\r\t\v

注意:与 S3 脚本解析器不同,此方法不支持\uXXXX转义序列


String capitalize() const 🔗

更改字符串的外观:将下划线(_)替换为空格,在单词中间的大写字母前添加空格,将所有字母转换为小写,然后将第一个字母以及每个空格后的字母转换为大写。

"move_local_x".capitalize()   # 返回 "Move Local X"
"sceneFile_path".capitalize() # 返回 "Scene File Path"
"2D, FPS, PNG".capitalize()   # 返回 "2d, Fps, Png"

int casecmp_to(to: String) const 🔗

对另一个字符串执行区分大小写的比较。如果小于则返回-1,如果大于则返回1,如果相等则返回0。“小于”和“大于”由每个字符串的Unicode代码点确定,大致匹配字母顺序。

使用不同的字符串长度,如果该字符串比字符串的to长,则返回1,如果短,则返回-1。请注意,空字符串的长度始终为0

要从字符串比较中获得bool结果,请改用==运算符。另请参见nocasecmp_to()filecasecmp_to()naturalcasecmp_to()


bool contains(what: String) const 🔗

如果字符串包含 what,则返回 true。在 S3Script 中,这对应于 in 运算符。.

print("Item".contains("de")) # 输入 true
print("team".contains("I"))  # 输入 false
print("I" in "team")         # 输入 false

如果你需要知道 what 在字符串中的位置,请使用 find()。另请参阅 containsn()


bool containsn(what: String) const 🔗

如果字符串包含what,则返回true忽略case

如果您需要知道字符串中的what在哪里,请使用findn()。另请参阅contains()


int count(what: String, from: int = 0, to: int = 0) const 🔗

返回fromto位置之间的子字符串what的出现次数。如果to为0,则搜索将继续到字符串末尾。


int countn(what: String, from: int = 0, to: int = 0) const 🔗

返回fromto位置之间的子字符串what的出现次数,忽略case。如果to为0,则搜索继续到字符串末尾。


String dedent() const 🔗

返回删除缩进(前导制表符和空格)的字符串副本。另请参阅indent()以添加缩进。


bool ends_with(text: String) const 🔗

如果字符串以给定的text结尾,则返回true。另请参见begins_with()


String erase(position: int, chars: int = 1) const 🔗

返回一个从position开始删除chars字符的字符串。如果chars超过给定position的字符串长度,则从返回的字符串中删除的字符将更少。如果positionchars为负数,则返回一个空字符串。如果chars0,则返回未修改的原始字符串。


int filecasecmp_to(to: String) const 🔗

类似于naturalcasecmp_to(),但优先考虑以句点(.)开头的字符串,并在任何其他字符之前下划线(_)。在对文件夹或文件名进行排序时很有用。

要从字符串比较中获得bool结果,请改用==运算符。另请参见filenocasecmp_to()naturalcasecmp_to()casecmp_to()


int filenocasecmp_to(to: String) const 🔗

类似于naturalnocasecmp_to(),但优先考虑以句点(.)开头的字符串,并在任何其他字符之前下划线(_)。在对文件夹或文件名进行排序时很有用。

要从字符串比较中获得bool结果,请改用==运算符。另请参见filecasecmp_to()naturalnocasecmp_to()nocasecmp_to()


int find(what: String, from: int = 0) const 🔗

返回此字符串中what第一次出现的索引,如果不存在则返回-1。可以使用from指定搜索的起始位置,搜索将持续到字符串末尾。

print("Team".find("I")) # 输入 -1

print("Potato".find("t"))    # 输入 2
print("Potato".find("t", 3)) # 输入 4
print("Potato".find("t", 5)) # 输入 -1

注意:如果您只是想知道字符串是否包含what,请使用contains()。在 S3Script 中,您也可以使用in运算符


int findn(what: String, from: int = 0) const 🔗

返回此字符串中what第一次不区分大小写出现的索引,如果没有,则返回-1。可以使用from指定起始搜索索引,继续到字符串的末尾。


String format(values: Variant, placeholder: String = "{_}") const 🔗

通过将 placeholder 的所有出现替换为 values 的元素来格式化字符串。

values 可以是 DictionaryArrayObjectplaceholder 中的任何下划线将提前替换为相应的键。数组元素使用其索引作为键。

# 输入 "Waiting for i3D is a play by Samuel Beckett, and i3D Engine is named after it."
var use_array_values = "Waiting for {0} is a play by {1}, and {0} Engine is named after it."
print(use_array_values.format(["i3D", "Samuel Beckett"]))

# 输入 "User 42 is i3D."
print("User {id} is {name}.".format({"id": 42, "name": "i3D"}))

values 是一个 Array 时,会执行一些额外的处理。 如果 placeholder 不包含下划线,则 values 数组的元素将用于按顺序替换一次出现的占位符; 如果 values 的元素是另一个 2 元素数组,它将被解释为键值对。

# 输入 "User 42 is i3D."
print("User {} is {}.".format([42, "i3D"], "{}"))
print("User {id} is {name}.".format([["id", 42], ["name", "i3D"]]))

当传递Object时,将使用Object.get_property_list()中的属性名称作为键。

# 输入 "Visible true, position (0, 0)"
var node = Node2D.new()
print("Visible {visible}, position {position}".format(node))

注意:每个替换操作是针对 values 的每个元素顺序进行的,而不是一次性全部替换。这意味着如果插入的任何元素包含另一个占位符,它可能会被下一次替换更改。虽然这可能非常有用,但它经常会导致意外结果。如果没有必要,请确保 values 的元素不包含占位符。

print("{0} {1}".format(["{1}", "x"]))           # 输入 "x x"
print("{0} {1}".format(["x", "{0}"]))           # 输入 "x {0}"
print("{a} {b}".format({"a": "{b}", "b": "c"})) # 输入 "c c"
print("{a} {b}".format({"b": "c", "a": "{b}"})) # 输入 "{b} c"

注意:在C#中,建议使用"$"来插入字符串。


String get_base_dir() const 🔗

如果该字符串是有效的文件路径,则返回基本目录名。n

var dir_path = "/path/to/file.txt".get_base_dir() # dir_path is "/path/to"

String get_basename() const 🔗

如果该字符串是一个有效的文件路径,则返回完整的文件路径,但不包含扩展名。

var base = "/path/to/file.txt".get_basename() # base is "/path/to/file"

String get_extension() const 🔗

如果字符串是有效的文件名或路径,则返回不带前导句点的文件扩展名(.)。否则,返回空字符串。.

var a = "/path/to/file.txt".get_extension() # a is "txt"
var b = "cool.txt".get_extension()          # b is "txt"
var c = "cool.font.ires".get_extension()    # c is "ires"
var d = ".pack1".get_extension()            # d is "pack1"

var e = "file.txt.".get_extension()  # e is ""
var f = "file.txt..".get_extension() # f is ""
var g = "txt".get_extension()        # g is ""
var h = "".get_extension()           # h is ""

String get_file() const 🔗

如果字符串是有效的文件路径,则返回文件名,包括扩展名。.

var file = "/path/to/icon.png".get_file() # file is "icon.png"

String get_slice(delimiter: String, slice: int) const 🔗

使用 delimiter 拆分字符串,并返回索引 slice 处的子字符串。如果 delimiter 未出现在字符串中,则返回原始字符串。如果 slice 不存在,则返回空字符串。

如果您只需要一个子字符串,这比 split() 更快。

print("i/am/example/hi".get_slice("/", 2)) # 输入 "example"

int get_slice_count(delimiter: String) const 🔗

返回使用给定delimiter拆分字符串时的切片总数(参见split())。


String get_slicec(delimiter: int, slice: int) const 🔗

使用带有代码delimiter的Unicode字符拆分字符串,并在索引slice处返回子字符串。如果slice不存在,则返回空字符串。

如果您只需要一个子字符串,这比split()更快。


int hash() const 🔗

返回表示字符串内容的32位哈希值。

注意:由于哈希冲突,具有相等哈希值的字符串不能保证相同。相反,具有不同哈希值的字符串保证是不同的。


PackedByteArray hex_decode() const 🔗

将十六进制字符串解码为 PackedByteArrayn .. tabs:

.. code-tab:: s3script

   var text = "hello world"
   var encoded = text.to_utf8_buffer().hex_encode() # 输出 "68656c6c6f20776f726c64"
   print(buf.hex_decode().get_string_from_utf8())

.. code-tab:: csharp

   var text = "hello world";
   var encoded = text.ToUtf8Buffer().HexEncode(); // 输出 "68656c6c6f20776f726c64"
   S3.Print(buf.HexDecode().GetStringFromUtf8());

int hex_to_int() const 🔗

将表示十六进制数的字符串转换为int。该字符串可以选择以"0x"为前缀,负数还可以有一个额外的-前缀。

print("0xff".hex_to_int()) # 输入 255
print("ab".hex_to_int())   # 输入 171

String indent(prefix: String) const 🔗

使用给定的 prefix 缩进字符串的每一行。空行不缩进。另请参阅 dedent() 以删除缩进。例如,可以使用 "         " 用两个制表符缩进字符串,或使用 "    " 用四个空格缩进。


String insert(position: int, what: String) const 🔗

在字符串中给定的position插入what


bool is_absolute_path() const 🔗

如果字符串是指向文件或目录的路径,且其起始点已明确界定,则返回true。此方法与is_relative_path()相反。

这包括所有以"res://""user://""C:\""/"等开头的路径。


bool is_empty() const 🔗

如果字符串的长度为0""),则返回true。另见length()


bool is_relative_path() const 🔗

如果字符串是路径,并且其起点取决于上下文,则返回true。路径可以从当前目录开始,也可以从当前Item开始(如果字符串是从ItemPath派生的),并且有时可能以"./"为前缀。此方法与is_absolute_path()相反。


bool is_subsequence_of(text: String) const 🔗

如果此字符串的所有字符都能按其原始顺序在 text 中找到,则返回 true

var text = "Wow, incredible!"

print("inedible".is_subsequence_of(text)) # 输入 true
print("Word!".is_subsequence_of(text))    # 输入 true
print("Window".is_subsequence_of(text))   # 输入 false
print("".is_subsequence_of(text))         # 输入 true

bool is_subsequence_ofn(text: String) const 🔗

如果此字符串的所有字符都可以按原始顺序在text中找到,则返回true忽略case


bool is_valid_ascii_identifier() const 🔗

如果此字符串是有效的 ASCII 标识符,则返回 true。有效的 ASCII 标识符只能包含字母、数字和下划线(_),并且第一个字符不能是数字。

print("node_2d".is_valid_ascii_identifier())    # 输入 true
print("TYPE_FLOAT".is_valid_ascii_identifier()) # 输入 true
print("1st_method".is_valid_ascii_identifier()) # 输入 false
print("MyMethod#2".is_valid_ascii_identifier()) # 输入 false

另请参阅 is_valid_unicode_identifier()


bool is_valid_filename() const 🔗

如果此字符串不包含文件名中不允许出现的字符(: / \? * " | % < >),则返回true


bool is_valid_float() const 🔗

如果此字符串表示一个有效的浮点数,则返回true。有效的浮点数只能包含数字、一个小数点(.)和指数字母(e)。它也可以前缀一个正号(+)或负号(-)。任何有效的整数也是有效的浮点数(请参阅is_valid_int())。另请参阅to_float()。.

print("1.7".is_valid_float())   # 输入 true
print("24".is_valid_float())    # 输入 true
print("7e3".is_valid_float())   # 输入 true
print("Hello".is_valid_float()) # 输入 false

bool is_valid_hex_number(with_prefix: bool = false) const 🔗

如果此字符串是有效的十六进制数字,则返回 true。有效的十六进制数字仅包含数字或字母 AF(大写或小写均可),并且可能带有正号(+)或负号(-)前缀。

如果 with_prefixtrue,则十六进制数字需要以 "0x" 为前缀才被视为有效。

print("A08E".is_valid_hex_number())    # 输入 true
print("-AbCdEf".is_valid_hex_number()) # 输入 true
print("2.5".is_valid_hex_number())     # 输入 false

print("0xDEADC0DE".is_valid_hex_number(true)) # 输入 true

bool is_valid_html_color() const 🔗

如果此字符串是十六进制超文本标记语言中的有效颜色,则返回true。该字符串必须是3、4、6或8位的十六进制值(参见is_valid_hex_number()),并且可以以哈希符号(#)为前缀。其他颜色的超文本标记语言符号,例如名称或hsl(),被认为是无效的。另请参见Color.html()


bool is_valid_identifier() const 🔗

已弃用: 请改用 is_valid_ascii_identifier()

如果此字符串是有效的标识符,则返回true。有效的标识符只能包含字母、数字和下划线(_),并且第一个字符不能是数字。

print("node_2d".is_valid_identifier())    # 输入 true
print("TYPE_FLOAT".is_valid_identifier()) # 输入 true
print("1st_method".is_valid_identifier()) # 输入 false
print("MyMethod#2".is_valid_identifier()) # 输入 false

bool is_valid_int() const 🔗

如果此字符串表示一个有效的整数,则返回 true。有效的整数仅包含数字,并且可能会带有正号(+)或负号(-)前缀。另请参阅 to_int()

print("7".is_valid_int())    # 输入 true
print("1.65".is_valid_int()) # 输入 false
print("Hi".is_valid_int())   # 输入 false
print("+3".is_valid_int())   # 输入 true
print("-12".is_valid_int())  # 输入 true

bool is_valid_ip_address() const 🔗

如果此字符串表示格式良好的IPv4或IPv6地址,则返回true。此方法认为保留的IP地址"0.0.0.0""ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"有效。


bool is_valid_unicode_identifier() const 🔗

如果此字符串是有效的Unicode标识符,则返回true

有效的Unicode标识符必须以XID_Start类的Unicode字符或"_"开头,并且在其他位置可以包含XID_Continue类的Unicode字符。

print("node_2d".is_valid_unicode_identifier())      # 输入 true
print("1st_method".is_valid_unicode_identifier())   # 输入 false
print("MyMethod#2".is_valid_unicode_identifier())   # 输入 false
print("állóképesség".is_valid_unicode_identifier()) # 输入 true
print("выносливость".is_valid_unicode_identifier()) # 输入 true
print("体力".is_valid_unicode_identifier())         # 输入 true

另请参阅 is_valid_ascii_identifier()注意:此方法以与 S3Script 相同的方式检查标识符。有关更高级的检查,请参阅 TextServer.is_valid_identifier()


String join(parts: PackedStringArray) const 🔗

返回 parts 中元素的连接结果,每个元素之间由调用此方法的字符串分隔。此方法与 split() 方法相反。

var fruits = ["Apple", "Orange", "Pear", "Kiwi"]

print(", ".join(fruits))  # 输入 "Apple, Orange, Pear, Kiwi"
print("---".join(fruits)) # 输入 "Apple---Orange---Pear---Kiwi"

String json_escape() const 🔗

返回使用JSON标准转义的具有特殊字符的字符串的副本。因为它与C标准非常匹配,所以如果需要,可以使用c_unescape()取消转义字符串。


String left(length: int) const 🔗

从字符串开头返回前 length 个字符。如果 length 为负数,则从字符串末尾去除最后 length 个字符。.

print("Hello World!".left(3))  # 输入 "Hel"
print("Hello World!".left(-4)) # 输入 "Hello Wo"

int length() const 🔗

返回字符串中的字符数。空字符串(")总是返回0。另请参见is_empty()


String lpad(min_length: int, character: String = " ") const 🔗

如有必要,通过在字符串左侧添加character将字符串格式化为至少min_length长。另请参阅rpad()


String lstrip(chars: String) const 🔗

从字符串的开头删除chars中定义的一组字符。另请参阅rstrip()

注意:chars不是前缀。使用trim_prefix()删除单个前缀,而不是一组字符。


bool match(expr: String) const 🔗

*匹配零个或多个任意字符并且?[ /code]匹配除句点([code].)之外的任何单个字符。空字符串或空表达式的计算结果总是false


bool matchn(expr: String) const 🔗

一个简单的不区分大小写的**表达式是否匹配,其中*匹配零个或多个任意字符,并且?[ /code]匹配除句点([code].)之外的任何单个字符。空字符串或空表达式的计算结果总是false


PackedByteArray md5_buffer() const 🔗

将字符串的MD5哈希作为PackedByteArray返回。


String md5_text() const 🔗

将字符串的MD5哈希作为另一个String返回。


int naturalcasecmp_to(to: String) const 🔗

与另一个字符串执行区分大小写的自然顺序比较。如果小于,则返回-1,如果大于,则返回1,如果相等,则返回0。“小于”或“大于”由每个字符串的Unicode代码点确定,大致符合字母顺序。

当用于排序时,自然顺序比较按通常预期的每个数字的组合值对数字序列进行排序,而不是单个数字的值。排序后的字符串序列将是["1","2","3",…],而不是["1","10","2","3",…]

使用不同的字符串长度,如果该字符串比字符串的to长,则返回1,如果短,则返回-1。请注意,空字符串的长度始终为0

要从字符串比较中获得bool结果,请改用==运算符。另请参见naturalnocasecmp_to()filecasecmp_to()nocasecmp_to()


int naturalnocasecmp_to(to: String) const 🔗

与另一个字符串执行不区分大小写的自然顺序比较。如果小于,则返回-1,如果大于,则返回1,如果相等,则返回0。“小于”或“大于”由每个字符串的Unicode代码点确定,大致匹配字母顺序。内部,小写字符转换为大写进行比较。

当用于排序时,自然顺序比较按通常预期的每个数字的组合值对数字序列进行排序,而不是单个数字的值。排序后的字符串序列将是["1","2","3",…],而不是["1","10","2","3",…]

使用不同的字符串长度,如果该字符串比字符串的to长,则返回1,如果短,则返回-1。请注意,空字符串的长度始终为0

要从字符串比较中获得bool结果,请改用==运算符。另请参见naturalcasecmp_to()filenocasecmp_to()casecmp_to()


int nocasecmp_to(to: String) const 🔗

对另一个字符串执行不区分大小写的比较。如果小于则返回-1,如果大于则返回1,如果等于则返回0。“小于”或“大于”由每个字符串的Unicode代码点确定,大致匹配字母顺序。内部,小写字符转换为大写进行比较。

使用不同的字符串长度,如果该字符串比字符串的to长,则返回1,如果短,则返回-1。请注意,空字符串的长度始终为0

要从字符串比较中获得bool结果,请改用==运算符。另请参见casecmp_to()filenocasecmp_to()naturalnocasecmp_to()


String pad_decimals(digits: int) const 🔗

将表示数字的字符串格式化为在小数点之后具有digits的精确数量。


String pad_zeros(digits: int) const 🔗

将表示数字的字符串格式化为在小数点之前具有digits的精确数量。


String path_join(file: String) const 🔗

将字符串末尾的file连接为子路径,必要时添加/

示例: "this/is".path_join("path") == "this/is/path"


String repeat(count: int) const 🔗

多次重复此字符串。count需要大于0。否则,返回一个空字符串。


String replace(what: String, forwhat: String) const 🔗

用给定的forwhat替换字符串中所有出现的what


String replacen(what: String, forwhat: String) const 🔗

用给定的forwhat替换字符串中所有不区分大小写的**出现的what


String reverse() const 🔗

以相反的顺序返回此字符串的副本。此操作适用于unicode代码点,而不是代码点序列,并且可能会破坏复合字母或表情符号等内容。


int rfind(what: String, from: int = -1) const 🔗

返回此字符串中what最后出现的索引,如果没有,则返回-1。可以使用from指定搜索的开始,继续到字符串的开头。此方法与find()相反。


int rfindn(what: String, from: int = -1) const 🔗

返回此字符串中what最后不区分大小写出现的索引,如果没有,则返回-1。可以使用from指定起始搜索索引,继续到字符串的开头。此方法与findn()相反。


String right(length: int) const 🔗

从字符串末尾返回最后 length 个字符。如果 length 为负数,则从字符串开头删除前 length 个字符。

print("Hello World!".right(3))  # 输入 "ld!"
print("Hello World!".right(-4)) # 输入 "o World!"

String rpad(min_length: int, character: String = " ") const 🔗

如有必要,通过在字符串右侧添加character将字符串格式化为至少min_length长。另请参阅lpad()


PackedStringArray rsplit(delimiter: String = "", allow_empty: bool = true, maxsplit: int = 0) const 🔗

使用 delimiter 拆分字符串,并从字符串末尾开始返回子字符串数组。返回数组中的拆分顺序与原始字符串中的顺序相同。如果 delimiter 为空字符串,则每个子字符串将是单个字符。

如果 allow_emptyfalse,则相邻分隔符之间的空字符串将从数组中排除。

如果 maxsplit 大于 0,拆分的数量不得超过 maxsplit。默认情况下,整个字符串都会被拆分,这与 split() 基本相同。

var some_string = "One,Two,Three,Four"
var some_array = some_string.rsplit(",", true, 1)

print(some_array.size()) # 输入 2
print(some_array[0])     # 输入 "One,Two,Three"
print(some_array[1])     # 输入 "Four"

String rstrip(chars: String) const 🔗

从字符串末尾删除chars中定义的一组字符。另请参见lstrip()

注意:chars不是后缀。使用trim_suffix()删除单个后缀,而不是一组字符。


PackedByteArray sha1_buffer() const 🔗

将字符串的SHA-1哈希作为PackedByteArray返回。


String sha1_text() const 🔗

将字符串的SHA-1哈希作为另一个String返回。


PackedByteArray sha256_buffer() const 🔗

将字符串的SHA-256哈希作为PackedByteArray返回。


String sha256_text() const 🔗

将字符串的SHA-256哈希作为另一个String返回。


float similarity(text: String) const 🔗

返回此字符串与另一个字符串的相似度指数(索伦森 - 戴斯系数)。结果为1.0表示完全相似,而0.0表示完全不相似。

print("ABC123".similarity("ABC123")) # 输入 1.0
print("ABC123".similarity("XYZ456")) # 输入 0.0
print("ABC123".similarity("123ABC")) # 输入 0.8
print("ABC123".similarity("abc123")) # 输入 0.4

String simplify_path() const 🔗

如果该字符串是一个有效的文件路径,就将该字符串转换为规范路径。规范路径是尽可能最短的路径,不包含 "./" ,并且去除所有不必要的 "..""/"

var simple_path = "./path/to///../file".simplify_path()
print(simple_path) # 输入 "path/file"

PackedStringArray split(delimiter: String = "", allow_empty: bool = true, maxsplit: int = 0) const 🔗

使用 delimiter 拆分字符串,并返回子字符串数组。如果 delimiter 为空字符串,则每个子字符串将是单个字符。此方法与 join() 相反。

如果 allow_emptyfalse,则相邻分隔符之间的空字符串将从数组中排除。

如果 maxsplit 大于 0,则拆分的数量不得超过 maxsplit。默认情况下,将拆分整个字符串。

var some_array = "One,Two,Three,Four".split(",", true, 2)

print(some_array.size()) # 输入 3
print(some_array[0])     # 输入 "One"
print(some_array[1])     # 输入 "Two"
print(some_array[2])     # 输入 "Three,Four"

注意:如果你只需要数组中的一个子字符串,可以考虑使用get_slice(),它的速度更快。如果你需要使用更复杂的规则拆分字符串,请改用RegEx


PackedFloat64Array split_floats(delimiter: String, allow_empty: bool = true) const 🔗

通过使用 delimiter 将字符串拆分为浮点数,并返回一个 PackedFloat64Array

如果 allow_emptyfalse,则相邻分隔符之间的空或无效 float 转换将被排除。

var a = "1,2,4.5".split_floats(",")         # a is [1.0, 2.0, 4.5]
var c = "1| ||4.5".split_floats("|")        # c is [1.0, 0.0, 0.0, 4.5]
var b = "1| ||4.5".split_floats("|", false) # b is [1.0, 4.5]

String strip_edges(left: bool = true, right: bool = true) const 🔗

从字符串的开头和结尾去除所有不可打印的字符。这些字符包括空格、制表符(\t)和换行符(\n \r)。

如果leftfalse,则忽略字符串的开头。同样,如果rightfalse,则忽略字符串的结尾


String strip_escapes() const 🔗

从字符串中去除所有转义字符。这些转义字符包括ASCII表第一页中的所有不可打印控制字符(值从0到31),例如制表符(\t)和换行符(\n\r),但不包括空格。


String substr(from: int, len: int = -1) const 🔗

从带有长度len的位置from返回部分字符串。如果len-1(默认情况下),则返回从给定位置开始的字符串的其余部分。


PackedByteArray to_ascii_buffer() const 🔗

将字符串转换为ASCII/Latin-1编码的PackedByteArray。此方法比to_utf8_buffer()稍快,但将所有不支持的字符替换为空格。这与PackedByteArray.get_string_from_ascii()相反。


String to_camel_case() const 🔗

返回转换为camelCase的字符串。


float to_float() const 🔗

将表示十进制数的字符串转换为float。此方法在遇到第一个非数字字符时停止,第一个小数点(.)和指数字母(e)除外。另请参阅is_valid_float()

var a = "12.35".to_float()  # a is 12.35
var b = "1.2.3".to_float()  # b is 1.2
var c = "12xy3".to_float()  # c is 12.0
var d = "1e3".to_float()    # d is 1000.0
var e = "Hello!".to_float() # e is 0.0

int to_int() const 🔗

将表示整数的字符串转换为int。此方法会移除任何非数字字符,并在遇到第一个小数点(.)时停止。另请参阅is_valid_int()

var a = "123".to_int()    # a is 123
var b = "x1y2z3".to_int() # b is 123
var c = "-1.2.3".to_int() # c is -1
var d = "Hello!".to_int() # d is 0

String to_lower() const 🔗

返回转换为小写的字符串。


String to_pascal_case() const 🔗

返回转换为PascalCase的字符串。


String to_snake_case() const 🔗

返回转换为蛇形命名法的字符串。

注意: 为了使某些单词(如“2D”)保持不变,单个字母紧跟数字的情况在转换时不进行分隔。

"Node2D".to_snake_case()               # 返回 "node_2d"
"2nd place".to_snake_case()            # 返回 "2_nd_place"
"Texture3DAssetFolder".to_snake_case() # 返回 "texture_3d_asset_folder"

String to_upper() const 🔗

返回转换为大写的字符串。


PackedByteArray to_utf8_buffer() const 🔗

将字符串转换为UTF-8编码的PackedByteArray。此方法比to_ascii_buffer()稍慢,但支持所有UTF-8字符。在大多数情况下,更喜欢使用此方法。这与PackedByteArray.get_string_from_utf8()相反。


PackedByteArray to_utf16_buffer() const 🔗

将字符串转换为UTF-16编码的PackedByteArray。这与PackedByteArray.get_string_from_utf16()相反。


PackedByteArray to_utf32_buffer() const 🔗

将字符串转换为UTF-32编码的PackedByteArray。这与PackedByteArray.get_string_from_utf32()相反。


PackedByteArray to_wchar_buffer() const 🔗

将字符串转换为宽字符wchar_t, Windows上的UTF-16,其他平台上的UTF-32)编码的PackedByteArray。这是PackedByteArray.get_string_from_wchar()的逆。


String trim_prefix(prefix: String) const 🔗

从字符串的开头删除给定的prefix,或返回未更改的字符串。


String trim_suffix(suffix: String) const 🔗

从字符串末尾删除给定的suffix,或返回未更改的字符串。


int unicode_at(at: int) const 🔗

返回位置at处的字符代码。


String uri_decode() const 🔗

将字符串从其URL编码格式中解码。此方法旨在在接收HTTP请求时正确解码URL中的参数。另请参阅uri_encode()

var url = "$DOCS_URL/?highlight=i3D%20Engine%3%docs"
print(url.uri_decode()) # 输入 "$DOCS_URL/?highlight=i3D Engine:docs"

String uri_encode() const 🔗

将字符串编码为适合URL的格式。此方法旨在在发送HTTP请求时正确编码URL中的参数。另请参阅uri_decode()

var prefix = "$DOCS_URL/?highlight="
var url = prefix + "i3D Engine:docs".uri_encode()

print(url) # 输入 "$DOCS_URL/?highlight=i3D%20Engine%3%docs"

String validate_filename() const 🔗

返回字符串的副本,其中is_valid_filename()中不允许的所有字符都替换为下划线。


String validate_node_name() const 🔗

返回字符串的副本,其中Item.name.@/"%)中不允许的所有字符都被下划线替换。


String xml_escape(escape_quotes: bool = false) const 🔗

返回带有使用XML标准转义的特殊字符的字符串副本。如果escape_quotestrue,则单引号(')和双引号(")字符也会被转义。


String xml_unescape() const 🔗

返回字符串的副本,其中转义字符根据XML标准替换为其含义。


运算符说明

bool operator !=(right: String) 🔗

如果此StringName不等效于给定的String,则返回true


bool operator !=(right: StringName) 🔗

如果StringNameright不引用相同的名称,则返回trueStringName之间的比较比常规的String比较快得多。


String operator %(right: Variant) 🔗

格式化StringName,用一个或多个参数替换占位符,返回一个String。要传递多个参数,right需要是一个Array

注意:在C#中,此运算符不可用。相反,请参阅如何用“$”插入字符串。


String operator +(right: String) 🔗

在此StringName的末尾附加right,返回String。这也称为字符串连接。


String operator +(right: StringName) 🔗

在此StringName的末尾附加right,返回String。这也称为字符串连接。


bool operator <(right: StringName) 🔗

如果左StringName的指针位于right之前,则返回true。请注意,这与它们的Unicode order不匹配。


bool operator <=(right: StringName) 🔗

如果左StringName的指针在right之前或它们相同,则返回true。请注意,这与它们的Unicode order不匹配。


bool operator ==(right: String) 🔗

如果此StringName等效于给定的String,则返回true


bool operator ==(right: StringName) 🔗

如果StringNameright引用相同的名称,则返回trueStringName之间的比较比常规的String比较快得多。


bool operator >(right: StringName) 🔗

如果左StringName的指针位于right之后,则返回true。请注意,这与它们的Unicode order不匹配。


bool operator >=(right: StringName) 🔗

如果左StringName的指针在right之后或者它们相同,则返回true。请注意,这与它们的Unicode order不匹配。