查看源代码 string (stdlib v6.2)

字符串处理函数。

此模块提供用于字符串处理的函数。

此模块中的字符串由 unicode:chardata/0 表示,即码位列表、使用 UTF-8 编码码位的二进制数据(UTF-8 二进制数据)或两者的混合。

"abcd"               is a valid string
<<"abcd">>           is a valid string
["abcd"]             is a valid string
<<"abc..åäö"/utf8>>  is a valid string
<<"abc..åäö">>       is NOT a valid string,
                     but a binary with Latin-1-encoded codepoints
[<<"abc">>, "..åäö"] is a valid string
[atom]               is NOT a valid string

此模块对字形集群进行操作。字形集群是用户感知的字符,可以用多个码位表示。

"å"  [229] or [97, 778]
"e̊"  [101, 778]

字符串 "ß↑e̊" 的长度为 3,即使它由码位 [223,8593,101,778] 或 UTF-8 二进制数据 <<195,159,226,134,145,101,204,138>> 表示。

出于性能原因,对于 find/3replace/3split/2split/3trim/3 中的 prepend 类和非现代(或分解)的韩文码位,不处理字形集群。

字符串的拆分和追加要在字形集群边界上进行。不验证追加字符串的结果是否有效或已规范化。

大多数函数都希望所有输入都规范化为一种形式,例如,请参阅 unicode:characters_to_nfc_list/1

任何函数都不考虑对输入进行语言或特定于区域设置的处理。

对于无效的输入字符串,这些函数可能会崩溃。例如,这些函数期望 UTF-8 二进制数据,但并非所有函数都验证所有二进制数据是否已正确编码。

除非另有说明,否则返回值类型与输入类型相同。也就是说,二进制输入返回二进制输出,列表输入返回列表输出,混合输入可以返回混合输出。

1> string:trim("  sarah  ").
"sarah"
2> string:trim(<<"  sarah  ">>).
<<"sarah">>
3> string:lexemes("foo bar", " ").
["foo","bar"]
4> string:lexemes(<<"foo bar">>, " ").
[<<"foo">>,<<"bar">>]

此模块已在 Erlang/OTP 20 中重新构建,以处理 unicode:chardata/0 并对字形集群进行操作。仅适用于 Latin-1 列表作为输入的 旧函数 仍然可用,但不应使用,它们将在未来的版本中被弃用。

备注

一些通用的字符串函数看起来似乎相互重叠。原因是此字符串包是两个早期包的组合,并且保留了这两个包的所有函数。

摘要

类型

用户感知的字符,由一个或多个码位组成。

函数

String 转换为不区分大小写、可比较的字符串。当要比较两个字符串是否相等时,首选函数 casefold/1,而不是 lowercase/1。另请参阅 equal/4

返回一个字符串,其中从 String 中删除了任何尾随的 \n\r\n

如果 AB 相等,则返回 true,否则返回 false

删除 StringSearchPattern 之前的所有内容,并返回字符串的其余部分;如果未找到 SearchPattern,则返回 nomatchDir 可以是 leadingtrailing,表示要从哪个方向搜索字符。

如果 String 是空字符串,则返回 true,否则返回 false

返回一个介于 +0.01.0 之间的浮点数,表示给定字符串之间的 Jaro 相似度。相似度较高的字符串得分会更接近 1.0+0.0 表示没有相似度,1.0 表示完全匹配。

返回 String 中的字形集群数。

返回 String 中的词素列表,由 SeparatorList 中的字形集群分隔。

String 转换为小写。

返回 String 中的第一个码位,以及尾部中 String 的其余部分。如果 String 为空,则返回空列表;如果下一个字节无效,则返回 {error, String} 元组。

返回 String 中的第一个字形集群,以及尾部中 String 的其余部分。如果 String 为空,则返回空列表;如果下一个字节无效,则返回 {error, String} 元组。

返回 String 中第 N 个词素,其中词素由 SeparatorList 中的字形集群分隔。

使用字形集群 CharString 填充到 LengthDir 可以是 leadingtrailingboth,表示应在何处添加填充。

如果 PrefixString 的前缀,则删除它并返回 String 的其余部分,否则返回 nomatch

String 中的 SearchPattern 替换为 ReplacementWhere 指示要替换 SearchPatternleadingtrailingall 次出现。

返回 String 中字形集群的反向列表。

返回 String 的子字符串,该子字符串最多包含 Length 个字形集群,从位置 Start 开始。

在遇到 SearchPattern 的位置拆分 String,并返回剩余部分。Where,默认为 leading,指示 SearchPatternleadingtrailingall 次出现将拆分 String

只要字符是集合 Characters 的成员或集合 Characters 的补集,就从 String 中获取字符。Dir 可以是 leadingtrailing,表示要从哪个方向获取字符。

String 转换为首字母大写。

参数 String 应该以有效的文本表示浮点数开头(数字为 ASCII 值)。浮点数之后字符串中的剩余字符将在 Rest 中返回。

String 转换为字形集群列表。

参数 String 应该以有效的文本表示整数开头(数字为 ASCII 值)。整数之后字符串中的剩余字符将在 Rest 中返回。

等效于 trim(String, Dir, Whitespace}),其中 Whitespace 是不可中断的空格码位集,定义为 Unicode 标准附件 #31 中的 Pattern_White_Space。

返回一个字符串,其中删除了前导或尾随或两者都删除了的 Characters

String 转换为大写。

过时的 API 函数

返回一个字符串,其中 String 位于字符串中心,并被空格或 Character 包围。结果字符串的长度为 Number

返回一个由 Number 个字符 Character 组成的字符串。或者,该字符串可以以字符串 Tail 结尾。

返回 CharacterString 中首次出现的索引。如果 Character 未出现,则返回 0

连接 String1String2 以形成新的字符串 String3,并返回该字符串。

返回一个包含 String 重复 Number 次的字符串。

返回 String 的最大初始段的长度,该段完全由不属于 Chars 的字符组成。

返回一个字符串,其中 StringList 的元素由 Separator 中的字符串分隔。

返回根据 Number 调整长度的 String。左边距是固定的。如果 length(String) < Number,则使用空格或 Character 填充 String

返回 String 中的字符数。

返回 CharacterString 中最后一次出现的索引。如果 Character 未出现,则返回 0

返回根据 Number 调整长度的 String。右边距是固定的。如果 (String) 的长度 < Number,则使用空格或 Character 填充 String

返回 SubStringString 中最后一次出现的位置的起始索引。如果 SubStringString 中不存在,则返回 0

返回由 Chars 中字符组成的 String 的最大初始段的长度。

返回 SubStringString 中第一次出现的位置的起始索引。如果 SubStringString 中不存在,则返回 0

返回一个字符串,其中已移除前导或尾随,或两者都有的空格或若干个 Character

返回 String 的一个子字符串,该子字符串从位置 Start 开始到字符串的末尾,或到并包括位置 Stop

返回 String 中位于位置 Number 的单词。单词由空格或 Character 分隔。

返回 String 的一个子字符串,该子字符串从位置 Start 开始,到字符串的末尾或长度为 Length 的位置结束。

指定的字符串或字符将进行大小写转换。请注意,支持的字符集是 ISO/IEC 8859-1(也称为 Latin 1);此集合之外的所有值都不会更改。

指定的字符串或字符将进行大小写转换。请注意,支持的字符集是 ISO/IEC 8859-1(也称为 Latin 1);此集合之外的所有值都不会更改。

返回 String 中的标记列表,标记由 SeparatorList 中的字符分隔。

返回 String 中的单词数,单词由空格或 Character 分隔。

类型

此类型的链接

direction()

查看源代码 (未导出)
-type direction() :: leading | trailing.
-type grapheme_cluster() :: char() | [char()].

用户感知的字符,由一个或多个码位组成。

函数

此函数的链接

casefold(String)

查看源代码 (自 OTP 20.0 起)
-spec casefold(String :: unicode:chardata()) -> unicode:chardata().

String 转换为不区分大小写、可比较的字符串。当要比较两个字符串是否相等时,首选函数 casefold/1,而不是 lowercase/1。另请参阅 equal/4

示例

1> string:casefold("Ω and ẞ SHARP S").
"ω and ss sharp s"
此函数的链接

chomp(String)

查看源代码 (自 OTP 20.0 起)
-spec chomp(String :: unicode:chardata()) -> unicode:chardata().

返回一个字符串,其中从 String 中删除了任何尾随的 \n\r\n

示例

182> string:chomp(<<"\nHello\n\n">>).
<<"\nHello">>
183> string:chomp("\nHello\r\r\n").
"\nHello\r"
-spec equal(A, B) -> boolean() when A :: unicode:chardata(), B :: unicode:chardata().

等效于 equal(A, B, true)

此函数的链接

equal(A, B, IgnoreCase)

查看源代码 (自 OTP 20.0 起)
-spec equal(A, B, IgnoreCase) -> boolean()
               when A :: unicode:chardata(), B :: unicode:chardata(), IgnoreCase :: boolean().

等效于 equal(A, B, IgnoreCase, none)

此函数的链接

equal(A, B, IgnoreCase, Norm)

查看源代码 (自 OTP 20.0 起)
-spec equal(A, B, IgnoreCase, Norm) -> boolean()
               when
                   A :: unicode:chardata(),
                   B :: unicode:chardata(),
                   IgnoreCase :: boolean(),
                   Norm :: none | nfc | nfd | nfkc | nfkd.

如果 AB 相等,则返回 true,否则返回 false

如果 IgnoreCasetrue,则函数会在相等性测试之前动态执行 casefold 操作。

如果 Norm 不是 none,则函数会在相等性测试之前动态应用规范化。有四种可用的规范化形式:nfcnfdnfkcnfkd

示例

1> string:equal("åäö", <<"åäö"/utf8>>).
true
2> string:equal("åäö", unicode:characters_to_nfd_binary("åäö")).
false
3> string:equal("åäö", unicode:characters_to_nfd_binary("ÅÄÖ"), true, nfc).
true
此函数的链接

find(String, SearchPattern)

查看源代码 (自 OTP 20.0 起)
-spec find(String, SearchPattern) -> unicode:chardata() | nomatch
              when String :: unicode:chardata(), SearchPattern :: unicode:chardata().

等效于 find(String, SearchPattern, leading)

此函数的链接

find(String, SearchPattern, Dir)

查看源代码 (自 OTP 20.0 起)
-spec find(String, SearchPattern, Dir) -> unicode:chardata() | nomatch
              when String :: unicode:chardata(), SearchPattern :: unicode:chardata(), Dir :: direction().

删除 StringSearchPattern 之前的所有内容,并返回字符串的其余部分;如果未找到 SearchPattern,则返回 nomatchDir 可以是 leadingtrailing,表示要从哪个方向搜索字符。

示例

1> string:find("ab..cd..ef", ".").
"..cd..ef"
2> string:find(<<"ab..cd..ef">>, "..", trailing).
<<"..ef">>
3> string:find(<<"ab..cd..ef">>, "x", leading).
nomatch
4> string:find("ab..cd..ef", "x", trailing).
nomatch
此函数的链接

is_empty(String)

查看源代码 (自 OTP 20.0 起)
-spec is_empty(String :: unicode:chardata()) -> boolean().

如果 String 是空字符串,则返回 true,否则返回 false

示例

1> string:is_empty("foo").
false
2> string:is_empty(["",<<>>]).
true
此函数的链接

jaro_similarity(String1, String2)

查看源代码 (自 OTP 27.0 起)
-spec jaro_similarity(String1, String2) -> Similarity
                         when
                             String1 :: unicode:chardata(),
                             String2 :: unicode:chardata(),
                             Similarity :: float().

返回一个介于 +0.01.0 之间的浮点数,表示给定字符串之间的 Jaro 相似度。相似度较高的字符串得分会更接近 1.0+0.0 表示没有相似度,1.0 表示完全匹配。

示例

1> string:jaro_similarity("ditto", "ditto").
1.0
2> string:jaro_similarity("foo", "bar").
+0.0
3> string:jaro_similarity("michelle", "michael").
0.8690476190476191
4> string:jaro_similarity(<<"Édouard"/utf8>>, <<"Claude">>).
0.5317460317460317

两个字符串之间的 Jaro 距离可以使用 JaroDistance = 1.0 - JaroSimilarity 计算。

此函数的链接

length(String)

查看源代码 (自 OTP 20.0 起)
-spec length(String :: unicode:chardata()) -> non_neg_integer().

返回 String 中的字形集群数。

示例

1> string:length("ß↑e̊").
3
2> string:length(<<195,159,226,134,145,101,204,138>>).
3
此函数的链接

lexemes(String, SeparatorList)

查看源代码 (自 OTP 20.0 起)
-spec lexemes(String :: unicode:chardata(), SeparatorList :: [grapheme_cluster()]) ->
                 [unicode:chardata()].

返回 String 中的词素列表,由 SeparatorList 中的字形集群分隔。

请注意,如本示例所示,String 中两个或多个相邻的分隔符字形簇被视为一个。也就是说,结果的词素列表中没有空字符串。另请参阅返回空字符串的 split/3

请注意,[$\r,$\n] 是一个字形簇。

示例

1> string:lexemes("abc de̊fxxghix jkl\r\nfoo", "x e" ++ [[$\r,$\n]]).
["abc","de̊f","ghi","jkl","foo"]
2> string:lexemes(<<"abc de̊fxxghix jkl\r\nfoo"/utf8>>, "x e" ++ [$\r,$\n]).
[<<"abc">>,<<"de̊f"/utf8>>,<<"ghi">>,<<"jkl\r\nfoo">>]
此函数的链接

lowercase(String)

查看源代码 (自 OTP 20.0 起)
-spec lowercase(String :: unicode:chardata()) -> unicode:chardata().

String 转换为小写。

请注意,在将字符串转换为进行相等性测试时,应使用函数 casefold/1

示例

2> string:lowercase(string:uppercase("Michał")).
"michał"
此函数的链接

next_codepoint(String)

查看源代码 (自 OTP 20.0 起)
-spec next_codepoint(String :: unicode:chardata()) ->
                        maybe_improper_list(char(), unicode:chardata()) | {error, unicode:chardata()}.

返回 String 中的第一个码位,以及尾部中 String 的其余部分。如果 String 为空,则返回空列表;如果下一个字节无效,则返回 {error, String} 元组。

示例

1> string:next_codepoint(unicode:characters_to_binary("e̊fg")).
[101|<<"̊fg"/utf8>>]
此函数的链接

next_grapheme(String)

查看源代码 (自 OTP 20.0 起)
-spec next_grapheme(String :: unicode:chardata()) ->
                       maybe_improper_list(grapheme_cluster(), unicode:chardata()) |
                       {error, unicode:chardata()}.

返回 String 中的第一个字形集群,以及尾部中 String 的其余部分。如果 String 为空,则返回空列表;如果下一个字节无效,则返回 {error, String} 元组。

示例

1> string:next_grapheme(unicode:characters_to_binary("e̊fg")).
["e̊"|<<"fg">>]
此函数的链接

nth_lexeme(String, N, SeparatorList)

查看源代码 (自 OTP 20.0 起)
-spec nth_lexeme(String, N, SeparatorList) -> unicode:chardata()
                    when
                        String :: unicode:chardata(),
                        N :: non_neg_integer(),
                        SeparatorList :: [grapheme_cluster()].

返回 String 中第 N 个词素,其中词素由 SeparatorList 中的字形集群分隔。

示例

1> string:nth_lexeme("abc.de̊f.ghiejkl", 3, ".e").
"ghi"
此函数的链接

pad(String, Length)

查看源代码 (自 OTP 20.0 起)
-spec pad(String, Length) -> unicode:charlist() when String :: unicode:chardata(), Length :: integer().

等效于 pad(String, Length, trailing)

此函数的链接

pad(String, Length, Dir)

查看源代码 (自 OTP 20.0 起)
-spec pad(String, Length, Dir) -> unicode:charlist()
             when String :: unicode:chardata(), Length :: integer(), Dir :: direction() | both.

等效于 pad(String, Length, Dir, $ )

此函数的链接

pad(String, Length, Dir, Char)

查看源代码 (自 OTP 20.0 起)
-spec pad(String, Length, Dir, Char) -> unicode:charlist()
             when
                 String :: unicode:chardata(),
                 Length :: integer(),
                 Dir :: direction() | both,
                 Char :: grapheme_cluster().

使用字形集群 CharString 填充到 LengthDir 可以是 leadingtrailingboth,表示应在何处添加填充。

示例

1> string:pad(<<"He̊llö"/utf8>>, 8).
[<<72,101,204,138,108,108,195,182>>,32,32,32]
2> io:format("'~ts'~n",[string:pad("He̊llö", 8, leading)]).
'   He̊llö'
3> io:format("'~ts'~n",[string:pad("He̊llö", 8, both)]).
' He̊llö  '
此函数的链接

prefix(String, Prefix)

查看源代码 (自 OTP 20.0 起)
-spec prefix(String :: unicode:chardata(), Prefix :: unicode:chardata()) -> nomatch | unicode:chardata().

如果 PrefixString 的前缀,则删除它并返回 String 的其余部分,否则返回 nomatch

示例

1> string:prefix(<<"prefix of string">>, "pre").
<<"fix of string">>
2> string:prefix("pre", "prefix").
nomatch
此函数的链接

replace(String, SearchPattern, Replacement)

查看源代码 (自 OTP 20.0 起)
-spec replace(String, SearchPattern, Replacement) -> [unicode:chardata()]
                 when
                     String :: unicode:chardata(),
                     SearchPattern :: unicode:chardata(),
                     Replacement :: unicode:chardata().

等效于 replace(String, SearchPattern, Replacement, leading)

此函数的链接

replace(String, SearchPattern, Replacement, Where)

查看源代码 (自 OTP 20.0 起)
-spec replace(String, SearchPattern, Replacement, Where) -> [unicode:chardata()]
                 when
                     String :: unicode:chardata(),
                     SearchPattern :: unicode:chardata(),
                     Replacement :: unicode:chardata(),
                     Where :: direction() | all.

String 中的 SearchPattern 替换为 ReplacementWhere 指示要替换 SearchPatternleadingtrailingall 次出现。

可以实现为

lists:join(Replacement, split(String, SearchPattern, Where)).

示例

1> string:replace(<<"ab..cd..ef">>, "..", "*").
[<<"ab">>,"*",<<"cd..ef">>]
2> string:replace(<<"ab..cd..ef">>, "..", "*", all).
[<<"ab">>,"*",<<"cd">>,"*",<<"ef">>]
此函数的链接

reverse(String)

查看源代码 (自 OTP 20.0 起)
-spec reverse(String :: unicode:chardata()) -> [grapheme_cluster()].

返回 String 中字形集群的反向列表。

示例

1> Reverse = string:reverse(unicode:characters_to_nfd_binary("ÅÄÖ")).
[[79,776],[65,776],[65,778]]
2> io:format("~ts~n",[Reverse]).
ÖÄÅ
此函数的链接

slice(String, Start)

查看源代码 (自 OTP 20.0 起)
-spec slice(String, Start) -> Slice
               when
                   String :: unicode:chardata(), Start :: non_neg_integer(), Slice :: unicode:chardata().

等效于 slice(String, Length, infinity)

此函数的链接

slice(String, Start, Length)

查看源代码 (自 OTP 20.0 起)
-spec slice(String, Start, Length) -> Slice
               when
                   String :: unicode:chardata(),
                   Start :: non_neg_integer(),
                   Length :: infinity | non_neg_integer(),
                   Slice :: unicode:chardata().

返回 String 的子字符串,该子字符串最多包含 Length 个字形集群,从位置 Start 开始。

示例

1> string:slice(<<"He̊llö Wörld"/utf8>>, 4).
<<"ö Wörld"/utf8>>
2> string:slice(["He̊llö ", <<"Wörld"/utf8>>], 4,4).
"ö Wö"
3> string:slice(["He̊llö ", <<"Wörld"/utf8>>], 4,50).
"ö Wörld"
此函数的链接

split(String, SearchPattern)

查看源代码 (自 OTP 20.0 起)
-spec split(String, SearchPattern) -> [unicode:chardata()]
               when String :: unicode:chardata(), SearchPattern :: unicode:chardata().

等效于 split(String, SearchPattern, leading)

此函数的链接

split(String, SearchPattern, Where)

查看源代码 (自 OTP 20.0 起)
-spec split(String, SearchPattern, Where) -> [unicode:chardata()]
               when
                   String :: unicode:chardata(),
                   SearchPattern :: unicode:chardata(),
                   Where :: direction() | all.

在遇到 SearchPattern 的位置拆分 String,并返回剩余部分。Where,默认为 leading,指示 SearchPatternleadingtrailingall 次出现将拆分 String

示例

0> string:split("ab..bc..cd", "..").
["ab","bc..cd"]
1> string:split(<<"ab..bc..cd">>, "..", trailing).
[<<"ab..bc">>,<<"cd">>]
2> string:split(<<"ab..bc....cd">>, "..", all).
[<<"ab">>,<<"bc">>,<<>>,<<"cd">>]
此函数的链接

take(String, Characters)

查看源代码 (自 OTP 20.0 起)
-spec take(String, Characters) -> {Leading, Trailing}
              when
                  String :: unicode:chardata(),
                  Characters :: [grapheme_cluster()],
                  Leading :: unicode:chardata(),
                  Trailing :: unicode:chardata().

等效于 take(String, Characters, false)

此函数的链接

take(String, Characters, Complement)

查看源代码 (自 OTP 20.0 起)
-spec take(String, Characters, Complement) -> {Leading, Trailing}
              when
                  String :: unicode:chardata(),
                  Characters :: [grapheme_cluster()],
                  Complement :: boolean(),
                  Leading :: unicode:chardata(),
                  Trailing :: unicode:chardata().

等效于 take(String, Characters, Complement, leading)

此函数的链接

take(String, Characters, Complement, Dir)

查看源代码 (自 OTP 20.0 起)
-spec take(String, Characters, Complement, Dir) -> {Leading, Trailing}
              when
                  String :: unicode:chardata(),
                  Characters :: [grapheme_cluster()],
                  Complement :: boolean(),
                  Dir :: direction(),
                  Leading :: unicode:chardata(),
                  Trailing :: unicode:chardata().

只要字符是集合 Characters 的成员或集合 Characters 的补集,就从 String 中获取字符。Dir 可以是 leadingtrailing,表示要从哪个方向获取字符。

示例

5> string:take("abc0z123", lists:seq($a,$z)).
{"abc","0z123"}
6> string:take(<<"abc0z123">>, lists:seq($0,$9), true, leading).
{<<"abc">>,<<"0z123">>}
7> string:take("abc0z123", lists:seq($0,$9), false, trailing).
{"abc0z","123"}
8> string:take(<<"abc0z123">>, lists:seq($a,$z), true, trailing).
{<<"abc0z">>,<<"123">>}
此函数的链接

titlecase(String)

查看源代码 (自 OTP 20.0 起)
-spec titlecase(String :: unicode:chardata()) -> unicode:chardata().

String 转换为首字母大写。

示例

1> string:titlecase("ß is a SHARP s").
"Ss is a SHARP s"
-spec to_float(String) -> {Float, Rest} | {error, Reason}
                  when
                      String :: unicode:chardata(),
                      Float :: float(),
                      Rest :: unicode:chardata(),
                      Reason :: no_float | badarg.

参数 String 应该以有效的文本表示浮点数开头(数字为 ASCII 值)。浮点数之后字符串中的剩余字符将在 Rest 中返回。

示例

1> {F1,Fs} = string:to_float("1.0-1.0e-1"),
1> {F2,[]} = string:to_float(Fs),
1> F1+F2.
0.9
2> string:to_float("3/2=1.5").
{error,no_float}
3> string:to_float("-1.5eX").
{-1.5,"eX"}
此函数的链接

to_graphemes(String)

查看源代码 (自 OTP 20.0 起)
-spec to_graphemes(String :: unicode:chardata()) -> [grapheme_cluster()].

String 转换为字形集群列表。

示例

1> string:to_graphemes("ß↑e̊").
[223,8593,[101,778]]
2> string:to_graphemes(<<"ß↑e̊"/utf8>>).
[223,8593,[101,778]]
-spec to_integer(String) -> {Int, Rest} | {error, Reason}
                    when
                        String :: unicode:chardata(),
                        Int :: integer(),
                        Rest :: unicode:chardata(),
                        Reason :: no_integer | badarg.

参数 String 应该以有效的文本表示整数开头(数字为 ASCII 值)。整数之后字符串中的剩余字符将在 Rest 中返回。

示例

1> {I1,Is} = string:to_integer("33+22"),
1> {I2,[]} = string:to_integer(Is),
1> I1-I2.
11
2> string:to_integer("0.5").
{0,".5"}
3> string:to_integer("x=2").
{error,no_integer}
此函数的链接

trim(String)

查看源代码 (自 OTP 20.0 起)
-spec trim(String) -> unicode:chardata() when String :: unicode:chardata().

等效于 trim(String, both)

此函数的链接

trim(String, Dir)

查看源代码 (自 OTP 20.0 起)
-spec trim(String, Dir) -> unicode:chardata()
              when String :: unicode:chardata(), Dir :: direction() | both.

等效于 trim(String, Dir, Whitespace}),其中 Whitespace 是不可中断的空格码位集,定义为 Unicode 标准附件 #31 中的 Pattern_White_Space。

此函数的链接

trim(String, Dir, Characters)

查看源代码 (自 OTP 20.0 起)
-spec trim(String, Dir, Characters) -> unicode:chardata()
              when
                  String :: unicode:chardata(),
                  Dir :: direction() | both,
                  Characters :: [grapheme_cluster()].

返回一个字符串,其中删除了前导或尾随或两者都删除了的 Characters

Dir 可以是 leadingtrailingboth,指示要从哪个方向移除字符。

请注意,根据 Unicode 标准,[$\r,$\n] 是一个字素簇。

示例

1> string:trim("\t  Hello  \n").
"Hello"
2> string:trim(<<"\t  Hello  \n">>, leading).
<<"Hello  \n">>
3> string:trim(<<".Hello.\n">>, trailing, "\n.").
<<".Hello">>
此函数的链接

uppercase(String)

查看源代码 (自 OTP 20.0 起)
-spec uppercase(String :: unicode:chardata()) -> unicode:chardata().

String 转换为大写。

另请参阅 titlecase/1

示例

1> string:uppercase("Michał").
"MICHAŁ"

已过时的 API 函数

此函数的链接

centre(String, Number)

查看源代码
-spec centre(String, Number) -> Centered
                when String :: string(), Centered :: string(), Number :: non_neg_integer().

等效于 centre(String, Number, $ )

此函数的链接

centre(String, Number, Character)

查看源代码
-spec centre(String, Number, Character) -> Centered
                when
                    String :: string(),
                    Centered :: string(),
                    Number :: non_neg_integer(),
                    Character :: char().

返回一个字符串,其中 String 位于字符串中心,并被空格或 Character 包围。结果字符串的长度为 Number

此函数已过时。请使用 pad/3

此函数的链接

chars(Character, Number)

查看源代码
-spec chars(Character, Number) -> String
               when Character :: char(), Number :: non_neg_integer(), String :: string().

等效于 chars(Character, Number, [])

此函数的链接

chars(Character, Number, Tail)

查看源代码
-spec chars(Character, Number, Tail) -> String
               when
                   Character :: char(),
                   Number :: non_neg_integer(),
                   Tail :: string(),
                   String :: string().

返回一个由 Number 个字符 Character 组成的字符串。或者,该字符串可以以字符串 Tail 结尾。

此函数已过时。请使用 lists:duplicate/2

此函数的链接

chr(String, Character)

查看源代码
-spec chr(String, Character) -> Index
             when String :: string(), Character :: char(), Index :: non_neg_integer().

返回 CharacterString 中首次出现的索引。如果 Character 未出现,则返回 0

此函数已过时。请使用 find/2

此函数的链接

concat(String1, String2)

查看源代码
-spec concat(String1, String2) -> String3
                when String1 :: string(), String2 :: string(), String3 :: string().

连接 String1String2 以形成新的字符串 String3,并返回该字符串。

此函数已过时。请使用 [String1, String2] 作为 Data 参数,并调用 unicode:characters_to_list/2unicode:characters_to_binary/2 来展平输出。

此函数的链接

copies(String, Number)

查看源代码
-spec copies(String, Number) -> Copies
                when String :: string(), Copies :: string(), Number :: non_neg_integer().

返回一个包含 String 重复 Number 次的字符串。

此函数已过时。请使用 lists:duplicate/2

-spec cspan(String, Chars) -> Length
               when String :: string(), Chars :: string(), Length :: non_neg_integer().

返回 String 的最大初始段的长度,该段完全由不属于 Chars 的字符组成。

此函数已过时。请使用 take/3

示例

1> string:cspan("\t    abcdef", " \t").
0
此函数的链接

join(StringList, Separator)

查看源代码
-spec join(StringList, Separator) -> String
              when StringList :: [string()], Separator :: string(), String :: string().

返回一个字符串,其中 StringList 的元素由 Separator 中的字符串分隔。

此函数已过时。请使用 lists:join/2

示例

1> join(["one", "two", "three"], ", ").
"one, two, three"
-spec left(String, Number) -> Left
              when String :: string(), Left :: string(), Number :: non_neg_integer().

等效于 left(String, Number, $ )

此函数的链接

left(String, Number, Character)

查看源代码
-spec left(String, Number, Character) -> Left
              when
                  String :: string(), Left :: string(), Number :: non_neg_integer(), Character :: char().

返回根据 Number 调整长度的 String。左边距是固定的。如果 length(String) < Number,则使用空格或 Character 填充 String

此函数已过时。请使用 pad/2pad/3

示例

1> string:left("Hello",10,$.).
"Hello....."
-spec len(String) -> Length when String :: string(), Length :: non_neg_integer().

返回 String 中的字符数。

此函数已过时。请使用 length/1

此函数的链接

rchr(String, Character)

查看源代码
-spec rchr(String, Character) -> Index
              when String :: string(), Character :: char(), Index :: non_neg_integer().

返回 CharacterString 中最后一次出现的索引。如果 Character 未出现,则返回 0

此函数已过时。请使用 find/3

-spec right(String, Number) -> Right
               when String :: string(), Right :: string(), Number :: non_neg_integer().

等效于 right(String, Number, $ )

此函数的链接

right(String, Number, Character)

查看源代码
-spec right(String, Number, Character) -> Right
               when
                   String :: string(),
                   Right :: string(),
                   Number :: non_neg_integer(),
                   Character :: char().

返回根据 Number 调整长度的 String。右边距是固定的。如果 (String) 的长度 < Number,则使用空格或 Character 填充 String

此函数已过时。请使用 pad/3

示例

1> string:right("Hello", 10, $.).
".....Hello"
此函数的链接

rstr(String, SubString)

查看源代码
-spec rstr(String, SubString) -> Index
              when String :: string(), SubString :: string(), Index :: non_neg_integer().

返回 SubStringString 中最后一次出现的位置的起始索引。如果 SubStringString 中不存在,则返回 0

此函数已过时。请使用 find/3

示例

1> string:rstr(" Hello Hello World World ", "Hello World").
8
-spec span(String, Chars) -> Length
              when String :: string(), Chars :: string(), Length :: non_neg_integer().

返回由 Chars 中字符组成的 String 的最大初始段的长度。

此函数已过时。请使用 take/2

示例

1> string:span("\t    abcdef", " \t").
5
此函数的链接

str(String, SubString)

查看源代码
-spec str(String, SubString) -> Index
             when String :: string(), SubString :: string(), Index :: non_neg_integer().

返回 SubStringString 中第一次出现的位置的起始索引。如果 SubStringString 中不存在,则返回 0

此函数已过时。请使用 find/2

示例

1> string:str(" Hello Hello World World ", "Hello World").
8
-spec strip(string()) -> string().

等效于 strip(String, both)

此函数的链接

strip(String, Direction)

查看源代码
-spec strip(String, Direction) -> Stripped
               when String :: string(), Stripped :: string(), Direction :: left | right | both.

等效于 strip(String, Direction, $ )

此函数的链接

strip(String, Direction, Character)

查看源代码
-spec strip(String, Direction, Character) -> Stripped
               when
                   String :: string(),
                   Stripped :: string(),
                   Direction :: left | right | both,
                   Character :: char().

返回一个字符串,其中已移除前导或尾随,或两者都有的空格或若干个 Character

Direction,可以是 leftrightboth,表示要从哪个方向删除空格。strip/1 等同于 strip(String, both)

此函数已过时。请使用 trim/3

示例

1> string:strip("...Hello.....", both, $.).
"Hello"
此函数的链接

sub_string(String, Start)

查看源代码
-spec sub_string(String, Start) -> SubString
                    when String :: string(), SubString :: string(), Start :: pos_integer().

等效于 sub_string(String, Start, string:length(String))

此函数的链接

sub_string(String, Start, Stop)

查看源代码
-spec sub_string(String, Start, Stop) -> SubString
                    when
                        String :: string(),
                        SubString :: string(),
                        Start :: pos_integer(),
                        Stop :: pos_integer().

返回 String 的一个子字符串,该子字符串从位置 Start 开始到字符串的末尾,或到并包括位置 Stop

此函数已过时。请使用 slice/3

示例

1> sub_string("Hello World", 4, 8).
"lo Wo"
此函数的链接

sub_word(String, Number)

查看源代码
-spec sub_word(String, Number) -> Word when String :: string(), Word :: string(), Number :: integer().

等效于 sub_word(String, Number, $ )

此函数的链接

sub_word(String, Number, Character)

查看源代码
-spec sub_word(String, Number, Character) -> Word
                  when String :: string(), Word :: string(), Number :: integer(), Character :: char().

返回 String 中位于位置 Number 的单词。单词由空格或 Character 分隔。

此函数已过时。请使用 nth_lexeme/3

示例

1> string:sub_word(" Hello old boy !",3,$o).
"ld b"
-spec substr(String, Start) -> SubString
                when String :: string(), SubString :: string(), Start :: pos_integer().

等效于 substr(String, Start, string:length(String) - Start)

此函数的链接

substr(String, Start, Length)

查看源代码
-spec substr(String, Start, Length) -> SubString
                when
                    String :: string(),
                    SubString :: string(),
                    Start :: pos_integer(),
                    Length :: non_neg_integer().

返回 String 的一个子字符串,该子字符串从位置 Start 开始,到字符串的末尾或长度为 Length 的位置结束。

此函数已过时。请使用 slice/3

示例

1> substr("Hello World", 4, 5).
"lo Wo"
-spec to_lower(String) -> Result when String :: io_lib:latin1_string(), Result :: io_lib:latin1_string();
              (Char) -> CharResult when Char :: char(), CharResult :: char().

指定的字符串或字符将进行大小写转换。请注意,支持的字符集是 ISO/IEC 8859-1(也称为 Latin 1);此集合之外的所有值都不会更改。

此函数已过时,请使用 lowercase/1titlecase/1casefold/1

-spec to_upper(String) -> Result when String :: io_lib:latin1_string(), Result :: io_lib:latin1_string();
              (Char) -> CharResult when Char :: char(), CharResult :: char().

指定的字符串或字符将进行大小写转换。请注意,支持的字符集是 ISO/IEC 8859-1(也称为 Latin 1);此集合之外的所有值都不会更改。

此函数已过时,请使用 uppercase/1titlecase/1casefold/1

此函数的链接

tokens(String, SeparatorList)

查看源代码
-spec tokens(String, SeparatorList) -> Tokens
                when
                    String :: string(),
                    SeparatorList :: string(),
                    Tokens :: [Token :: nonempty_string()].

返回 String 中的标记列表,标记由 SeparatorList 中的字符分隔。

示例

1> tokens("abc defxxghix jkl", "x ").
["abc", "def", "ghi", "jkl"]

请注意,如本例所示,String 中两个或多个相邻的分隔符被视为一个。也就是说,生成的标记列表中没有空字符串。

此函数已过时。请使用 lexemes/2

-spec words(String) -> Count when String :: string(), Count :: pos_integer().

等效于 words(String, $ )

此函数的链接

words(String, Character)

查看源代码
-spec words(String, Character) -> Count
               when String :: string(), Character :: char(), Count :: pos_integer().

返回 String 中的单词数,单词由空格或 Character 分隔。

此函数已过时。请使用 lexemes/2

示例

1> words(" Hello old boy!", $o).
4