字符串操作函数
empty
检查输入字符串是否为空。如果字符串包含至少一个字节,即使该字节是空格或空字节,它仍然被视为非空。
语法
参数
x
— 输入值。 字符串。
返回值
- 如果字符串为空,返回
1
;如果字符串非空,返回0
。 UInt8。
示例
结果:
notEmpty
检查输入字符串是否非空。如果字符串包含至少一个字节,即使该字节是空格或空字节,它仍然被视为非空。
语法
参数
x
— 输入值。 字符串。
返回值
- 如果字符串非空,返回
1
;如果字符串为空,返回0
。 UInt8。
示例
结果:
length
返回字符串的字节长度,而不是字符或 Unicode 代码点的长度。该函数也适用于数组。
别名: OCTET_LENGTH
语法
参数
返回值
- 字符串或数组
s
的字节长度。 UInt64。
示例
查询:
结果:
查询:
结果:
lengthUTF8
返回字符串的 Unicode 代码点长度,而不是字节或字符的长度。它假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
别名:
CHAR_LENGTH
CHARACTER_LENGTH
语法
参数
s
— 包含有效 UTF-8 编码文本的字符串。 字符串。
返回值
- 字符串
s
的 Unicode 代码点数量。 UInt64。
示例
查询:
结果:
left
返回字符串 s
的子串,该子串从左侧起,指定 offset
字节。
语法
参数
s
— 要计算子串的字符串。 字符串 或 FixedString。offset
— 字节偏移量的数量。 (U)Int*。
返回值
- 对于正数
offset
:一个从字符串左侧开始的字节数为offset
的子串。 - 对于负数
offset
:一个从字符串左侧开始的字节数为length(s) - |offset|
的子串。 - 如果
length
为 0,则返回一个空字符串。
示例
查询:
结果:
查询:
结果:
leftUTF8
返回一个 UTF-8 编码字符串 s
的子串,从左侧开始,具有指定的 offset
。
语法
参数
s
— 要计算子串的UTF-8编码字符串。 字符串 或 FixedString。offset
— 字节偏移量的数量。 (U)Int*。
返回值
- 对于正数
offset
:一个从字符串左侧开始的字节数为offset
的子串。 - 对于负数
offset
:一个从字符串左侧开始的字节数为length(s) - |offset|
的子串。 - 如果
length
为 0,则返回一个空字符串。
示例
查询:
结果:
查询:
结果:
leftPad
在字符串的左侧用空格或指定的字符串进行填充(如有需要可多次填充),直到结果字符串达到指定的 length
。
语法
别名: LPAD
参数
string
— 应该填充的输入字符串。 字符串。length
— 结果字符串的长度。 UInt 或 Int。如果此值小于输入字符串的长度,则输入字符串被缩短为length
个字符。pad_string
— 用于填充输入字符串的字符串。 字符串。可选。如果未指定,则用空格填充输入字符串。
返回值
- 一个左侧填充到给定长度的字符串。 字符串。
示例
结果:
leftPadUTF8
在字符串左侧用空格或指定的字符串进行填充(如有需要可多次填充),直到结果字符串达到给定长度。与 leftPad 不同的是,它测量字符串的长度为代码点,而非字节。
语法
参数
string
— 应该填充的输入字符串。 字符串。length
— 结果字符串的长度。 UInt 或 Int。如果此值小于输入字符串的长度,则输入字符串被缩短为length
个字符。pad_string
— 用于填充输入字符串的字符串。 字符串。可选。如果未指定,则用空格填充输入字符串。
返回值
- 一个左侧填充到给定长度的字符串。 字符串。
示例
结果:
right
返回字符串 s
的子串,该子串从右侧起,具有指定的 offset
。
语法
参数
s
— 要计算子串的字符串。 字符串 或 FixedString。offset
— 字节偏移量的数量。 (U)Int*。
返回值
- 对于正数
offset
:一个从字符串右侧开始的字节数为offset
的子串。 - 对于负数
offset
:一个从字符串右侧开始的字节数为length(s) - |offset|
的子串。 - 如果
length
为 0,则返回一个空字符串。
示例
查询:
结果:
查询:
结果:
rightUTF8
返回一个 UTF-8 编码字符串 s
的子串,从右侧开始,具有指定的 offset
。
语法
参数
s
— 要计算子串的 UTF-8 编码字符串。 字符串 或 FixedString。offset
— 字节偏移量的数量。 (U)Int*。
返回值
- 对于正数
offset
:一个从字符串右侧开始的字节数为offset
的子串。 - 对于负数
offset
:一个从字符串右侧开始的字节数为length(s) - |offset|
的子串。 - 如果
length
为 0,则返回一个空字符串。
示例
查询:
结果:
查询:
结果:
rightPad
从右侧用空格或指定的字符串对字符串进行填充(如有需要可多次填充),直到结果字符串达到指定的 length
。
语法
别名: RPAD
参数
string
— 应该填充的输入字符串。 字符串。length
— 结果字符串的长度。 UInt 或 Int。如果此值小于输入字符串的长度,则输入字符串被缩短为length
个字符。pad_string
— 用于填充输入字符串的字符串。 字符串。可选。如果未指定,则用空格填充输入字符串。
返回值
- 一个右侧填充到给定长度的字符串。 字符串。
示例
结果:
rightPadUTF8
在字符串右侧用空格或指定的字符串进行填充(如有需要可多次填充),直到结果字符串达到给定长度。与 rightPad 不同的是,它测量字符串的长度为代码点,而非字节。
语法
参数
string
— 应该填充的输入字符串。 字符串。length
— 结果字符串的长度。 UInt 或 Int。如果此值小于输入字符串的长度,则输入字符串被缩短为length
个字符。pad_string
— 用于填充输入字符串的字符串。 字符串。可选。如果未指定,则用空格填充输入字符串。
返回值
- 一个右侧填充到给定长度的字符串。 字符串。
示例
结果:
compareSubstrings
按字典顺序比较两个字符串。
语法
参数
string1
— 第一个要比较的字符串。 字符串string2
- 第二个要比较的字符串。 字符串string1_offset
— 在string1
中开始比较的位置(零基)。 UInt*。string2_offset
— 在string2
中开始比较的位置(零基索引)。 UInt*。num_bytes
— 在两个字符串中进行比较的最大字节数。 如果string_offset
+num_bytes
超过输入字符串的末尾,则num_bytes
将相应减少。 UInt*。
返回值
- -1 — 如果
string1
[string1_offset
:string1_offset
+num_bytes
] <string2
[string2_offset
:string2_offset
+num_bytes
]。 - 0 — 如果
string1
[string1_offset
:string1_offset
+num_bytes
] =string2
[string2_offset
:string2_offset
+num_bytes
]。 - 1 — 如果
string1
[string1_offset
:string1_offset
+num_bytes
] >string2
[string2_offset
:string2_offset
+num_bytes
]。
示例
查询:
结果:
lower
将字符串中的 ASCII 拉丁符号转换为小写。
语法
别名: lcase
参数
input
: 字符串类型 字符串。
返回值
- 一个 字符串 数据类型的值。
示例
查询:
upper
将字符串中的 ASCII 拉丁符号转换为大写。
语法
别名: ucase
参数
input
— 字符串类型 字符串。
返回值
- 一个 字符串 数据类型的值。
示例
查询:
lowerUTF8
将字符串转换为小写,假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
不检测语言,例如对于土耳其语,结果可能不完全正确(i/İ vs. i/I)。如果大写和小写的代码点对于 UTF-8 字节序列的长度不同(例如 ẞ
和 ß
),该代码点的结果可能不正确。
语法
参数
input
— 字符串类型 字符串。
返回值
- 一个 字符串 数据类型的值。
示例
查询:
结果:
upperUTF8
将字符串转换为大写,假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
不检测语言,例如对于土耳其语,结果可能不完全正确(i/İ vs. i/I)。如果大写和小写的代码点对于 UTF-8 字节序列的长度不同(例如 ẞ
和 ß
),该代码点的结果可能不正确。
语法
参数
input
— 字符串类型 字符串。
返回值
- 一个 字符串 数据类型的值。
示例
查询:
结果:
isValidUTF8
如果字节集构成有效的 UTF-8 编码文本,则返回 1,否则返回 0。
语法
参数
input
— 字符串类型 字符串。
返回值
- 如果字节集构成有效的 UTF-8 编码文本,则返回
1
,否则返回0
。
查询:
结果:
toValidUTF8
用 �
(U+FFFD)字符替换无效的 UTF-8 字符。所有连续的无效字符都被压缩成一个替换字符。
语法
参数
input_string
— 任何作为 字符串 数据类型对象表示的字节集。
返回值
- 一个有效的 UTF-8 字符串。
示例
结果:
repeat
将字符串与自身连接指定次数。
语法
别名: REPEAT
参数
s
— 要重复的字符串。 字符串。n
— 重复字符串的次数。 UInt* 或 Int*。
返回值
一个包含字符串 s
重复 n
次的字符串。如果 n
<= 0,函数返回空字符串。 字符串。
示例
结果:
space
将空格(
)连接指定次数。
语法
别名: SPACE
。
参数
n
— 重复空格的次数。 UInt* 或 Int*。
返回值
包含字符串
重复 n
次的字符串。如果 n
<= 0,函数返回空字符串。 字符串。
示例
查询:
结果:
reverse
反转字符串中的字节序列。
reverseUTF8
反转字符串中的 Unicode 代码点序列。假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
concat
连接给定的参数。
语法
参数
任意类型的值。
不属于 字符串 或 FixedString 类型的参数会使用其默认序列化转换为字符串。由于这会降低性能,因此不建议使用非字符串/FixedString参数。
返回值
由连接参数而创建的字符串。
如果任何参数值为 NULL
,则函数返回 NULL
。
示例
查询:
结果:
查询:
结果:
||
运算符使用 ||
运算符进行字符串连接,作为 concat()
的简洁替代。例如,'Hello, ' || 'World!'
等价于 concat('Hello, ', 'World!')
。
concatAssumeInjective
与 concat 相似,但假设 concat(s1, s2, ...) → sn
是单射。可用于优化 GROUP BY。
如果函数对于不同的参数返回不同的结果,则称该函数为单射。换句话说:不同的参数永远不会产生相同的结果。
语法
参数
字符串或 FixedString 类型的值。
返回值
由连接参数而创建的字符串。
如果任何参数值为 NULL
,则函数返回 NULL
。
示例
输入表:
结果:
concatWithSeparator
使用给定的分隔符连接给定字符串。
语法
别名: concat_ws
参数
- sep — 分隔符。常量 字符串 或 FixedString。
- exprN — 要连接的表达式。不属于 字符串 或 FixedString 类型的参数会使用其默认序列化转换为字符串。由于这会降低性能,因此不建议使用非字符串/FixedString参数。
返回值
由连接参数而创建的字符串。
如果任何参数值为 NULL
,则函数返回 NULL
。
示例
结果:
concatWithSeparatorAssumeInjective
类似于 concatWithSeparator
,但假设 concatWithSeparator(sep, expr1, expr2, expr3...) → result
是单射。可用于优化 GROUP BY。
如果函数对于不同的参数返回不同的结果,则称该函数为单射。换句话说:不同的参数永远不会产生相同的结果。
substring
返回字符串 s
中从指定字节索引 offset
开始的子串。字节计数从 1 开始。如果 offset
为 0,返回空字符串。如果 offset
为负数,子串将从字符串末尾的 pos
字符开始,而不是从开头开始。可选参数 length
指定返回子串的最大字节数。
语法
别名:
substr
mid
byteSlice
参数
s
— 要计算子串的字符串。 字符串、 FixedString 或 Enumoffset
— 子串在s
中的起始位置。 (U)Int*。length
— 子串的最大长度。 (U)Int*。 可选。
返回值
一个从索引 offset
开始的、字节数为 length
的字符串子串。 字符串。
示例
结果:
substringUTF8
返回字符串 s
中从指定字节索引 offset
开始的子串,针对 Unicode 代码点。字节计数从 1
开始。如果 offset
为 0
,返回空字符串。如果 offset
为负数,子串将从字符串末尾的 pos
字符开始,而不是从开头开始。可选参数 length
指定返回子串的最大字节数。
假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
语法
参数
s
— 要计算子串的字符串。 字符串、 FixedString 或 Enumoffset
— 子串在s
中的起始位置。 (U)Int*。length
— 子串的最大长度。 (U)Int*。 可选。
返回值
一个从索引 offset
开始的、字节数为 length
的字符串子串。
实现细节
假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
示例
substringIndex
返回字符串 s
中在提取子串之前,指定分隔符 delim
的 count
次出现之前的部分,类似于 Spark 或 MySQL。
语法
别名: SUBSTRING_INDEX
参数
- s — 要提取子串的字符串。 字符串。
- delim — 用于分割的字符。 字符串。
- count — 提取子串之前需要计算的分隔符出现次数。如果 count 为正,返回最终分隔符左边的所有内容(从左侧计算)。如果 count 为负,返回最终分隔符右边的所有内容(从右侧计算)。 UInt 或 Int
示例
结果:
substringIndexUTF8
返回字符串 s
中在提取子串之前,指定分隔符 delim
的 count
次出现之前的部分,专门针对 Unicode 代码点。
假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
语法
参数
s
— 要提取子串的字符串。 字符串。- delim — 用于分割的字符。 字符串。
- count — 提取子串之前需要计算的分隔符出现次数。如果 count 为正,返回最终分隔符左边的所有内容(从左侧计算)。如果 count 为负,返回最终分隔符右边的所有内容(从右侧计算)。 UInt 或 Int
返回值
在 count
次出现 delim
之前的 s
的子串。 字符串。
实现细节
假设字符串包含有效的 UTF-8 编码文本。如果这个假设被违反,函数不会抛出异常,结果是未定义的。
示例
appendTrailingCharIfAbsent
如果字符串 s
非空且不以字符 c
结尾,则将字符 c
附加到字符串 s
末尾。
语法
convertCharset
将字符串 s
从编码 from
转换为编码 to
。
语法
base32Encode
使用 Base32 对字符串进行编码。
语法
参数
plaintext
— 字符串 列或常量。
返回值
- 包含参数编码值的字符串。 字符串 或 FixedString。
示例
结果:
base32Decode
接受一个字符串,并使用 Base32 解码。
语法
参数
encoded
— 字符串 或 FixedString。如果该字符串不是有效的 Base32 编码值,将抛出异常。
返回值
- 包含参数解码值的字符串。 字符串。
示例
结果:
tryBase32Decode
像 base32Decode
,但在出错时返回空字符串。
语法
参数
encoded
: 字符串 或 FixedString。如果该字符串不是有效的 Base32 编码值,在出错时返回空字符串。
返回值
- 包含参数解码值的字符串。
示例
查询:
base58Encode
使用 Base58 在 "Bitcoin" 字母表中编码字符串。
语法
参数
plaintext
— 字符串 列或常量。
返回值
- 包含参数编码值的字符串。 字符串 或 FixedString。
示例
结果:
base58Decode
接受一个字符串,并使用 Base58 解码,使用 "Bitcoin" 字母表。
语法
参数
encoded
— 字符串 或 FixedString。如果该字符串不是有效的 Base58 编码值,将抛出异常。
返回值
- 包含参数解码值的字符串。 字符串。
示例
结果:
tryBase58Decode
像 base58Decode
,但在出错时返回空字符串。
语法
参数
encoded
: 字符串 或 FixedString。如果该字符串不是有效的 Base58 编码值,在出错时返回空字符串。
返回值
- 包含参数解码值的字符串。
示例
查询:
base64Encode
将字符串或固定字符串编码为 base64,依据 RFC 4648。
别名: TO_BASE64
。
语法
参数
plaintext
— 字符串 列或常量。
返回值
- 包含参数编码值的字符串。
示例
结果:
base64URLEncode
将 URL(字符串或固定字符串)编码为 base64,并根据 RFC 4648 进行 URL 特定修改。
语法
参数
url
— 字符串 列或常量。
返回值
- 包含参数编码值的字符串。
示例
结果:
base64Decode
接受一个字符串并从 base64 解码,依据 RFC 4648。发生错误时抛出异常。
别名: FROM_BASE64
。
语法
参数
encoded
— 字符串 列或常量。如果该字符串不是有效的 Base64 编码值,将抛出异常。
返回值
- 包含参数解码值的字符串。
示例
结果:
base64URLDecode
接受一个 base64 编码的 URL,并根据 RFC 4648 进行 URL 特定修改,从 base64 解码。发生错误时抛出异常。
语法
参数
encodedURL
— 字符串 列或常量。如果该字符串不是有效的具有 URL 特定修改的 Base64 编码值,将抛出异常。
返回值
- 包含参数解码值的字符串。
示例
结果:
tryBase64Decode
像 base64Decode
,但在出错时返回空字符串。
语法
参数
encoded
— 字符串 列或常量。如果该字符串不是有效的 Base64 编码值,则返回空字符串。
返回值
- 包含参数解码值的字符串。
示例
查询:
tryBase64URLDecode
像 base64URLDecode
,但在出错时返回空字符串。
语法
参数
encodedURL
— 字符串 列或常量。如果该字符串不是有效的具有 URL 特定修改的 Base64 编码值,则返回空字符串。
返回值
- 包含参数解码值的字符串。
示例
查询:
endsWith
返回字符串 str
是否以 suffix
结尾。
语法
endsWithUTF8
返回字符串 str
是否以 suffix
结尾,与 endsWith
的区别在于 endsWithUTF8
通过 UTF-8 字符匹配 str
和 suffix
。
语法
示例
结果:
startsWith
返回字符串 str
是否以 prefix
开头。
语法
示例
startsWithUTF8
返回字符串 str
是否以 prefix
开头,与 startsWith
的区别在于 startsWithUTF8
通过 UTF-8 字符匹配 str
和 prefix
。
示例
结果:
trim
从字符串的开头或结尾删除指定的字符。如果未另行指定,函数会删除空格(ASCII字符32)。
语法
参数
返回值
一个没有开头和/或结尾指定字符的字符串。 字符串。
示例
结果:
trimLeft
从字符串的开头删除连续的空白(ASCII字符32)。
语法
别名: ltrim
。
参数
返回值
一个没有前导空格的字符串。 字符串。
示例
结果:
trimRight
从字符串的末尾移除连续的空白字符 (ASCII字符 32)。
语法
别名: rtrim
。
参数
返回值
去除了尾部公共空白的字符串。 String。
示例
结果:
trimBoth
从字符串的两端移除连续的空白字符 (ASCII字符 32)。
语法
别名: trim
。
参数
返回值
去除了前后的公共空白的字符串。 String。
示例
结果:
CRC32
返回字符串的 CRC32 校验和,使用 CRC-32-IEEE 802.3 多项式和初始值 0xffffffff
(zlib 实现)。
结果类型为 UInt32。
CRC32IEEE
返回字符串的 CRC32 校验和,使用 CRC-32-IEEE 802.3 多项式。
结果类型为 UInt32。
CRC64
返回字符串的 CRC64 校验和,使用 CRC-64-ECMA 多项式。
结果类型为 UInt64。
normalizeUTF8NFC
将字符串转换为 NFC 标准形式,假设字符串是有效的 UTF8 编码文本。
语法
参数
words
— UTF8 编码输入字符串。 String。
返回值
- 转换为 NFC 标准形式的字符串。 String。
示例
结果:
normalizeUTF8NFD
将字符串转换为 NFD 标准形式,假设字符串是有效的 UTF8 编码文本。
语法
参数
words
— UTF8 编码输入字符串。 String。
返回值
- 转换为 NFD 标准形式的字符串。 String。
示例
结果:
normalizeUTF8NFKC
将字符串转换为 NFKC 标准形式,假设字符串是有效的 UTF8 编码文本。
语法
参数
words
— UTF8 编码输入字符串。 String。
返回值
- 转换为 NFKC 标准形式的字符串。 String。
示例
结果:
normalizeUTF8NFKD
将字符串转换为 NFKD 标准形式,假设字符串是有效的 UTF8 编码文本。
语法
参数
words
— UTF8 编码输入字符串。 String。
返回值
- 转换为 NFKD 标准形式的字符串。 String。
示例
结果:
encodeXMLComponent
转义具有特殊意义的字符以便之后可以放入 XML 文本节点或属性中。
以下字符被替换: <
、 &
、 >
、 "
、 '
。
也请参见 XML 和 HTML 字符实体引用列表。
语法
参数
x
— 输入字符串。 String。
返回值
- 转义后的字符串。 String。
示例
结果:
decodeXMLComponent
取消转义具有特殊意义的 XML 子字符串。这些子字符串有: "
&
'
>
<
此函数还将数字字符引用替换为 Unicode 字符。支持十进制 (如 ✓
) 和十六进制 (✓
) 形式。
语法
参数
x
— 输入字符串。 String。
返回值
- 取消转义后的字符串。 String。
示例
结果:
decodeHTMLComponent
取消转义具有特殊意义的 HTML 子字符串。例如: ℏ
>
♦
♥
<
等等。
此函数还将数字字符引用替换为 Unicode 字符。支持十进制 (如 ✓
) 和十六进制 (✓
) 形式。
语法
参数
x
— 输入字符串。 String。
返回值
- 取消转义后的字符串。 String。
示例
结果:
extractTextFromHTML
此函数从 HTML 或 XHTML 中提取纯文本。
它并不完全符合 HTML、XML 或 XHTML 规范,但实现相当准确和快速。规则如下:
- 跳过注释。例如:
<!-- test -->
。注释必须以-->
结束。禁止嵌套注释。 注意:像<!-->
和<!--->
的构造在 HTML 中不是有效的注释,但会被其他规则跳过。 - CDATA 被逐字粘贴。注意:CDATA 是 XML/XHTML 特定的,并以“尽力而为”的方式处理。
script
和style
元素及其内容被移除。注意:假设闭合标签不能出现在内容内部。例如,在 JS 字符串字面量中必须像"<\/script>"
一样转义。 注意:script
或style
内部可能有注释和 CDATA - 那么在 CDATA 内部不搜索闭合标签。例如:<script><![CDATA[</script>]]></script>
。但它们仍然会在注释中被搜索。有时变得复杂:<script>var x = "<!--"; </script> var y = "-->"; alert(x + y);</script>
注意:script
和style
可能是 XML 命名空间的名称 - 然后它们不会像通常的script
或style
元素那样处理。例如:<script:a>Hello</script:a>
。 注意:闭合标签名称后可以有空白:</script >
,但不能在前面:< / script>
。- 其他标签或类标签的元素在没有内部内容的情况下被跳过。例如:
<a>.</a>
注意:预期此 HTML 是非法的:<a test=">"></a>
注意:它还跳过一些类似标签的东西:<>
、<!>
等等。 注意:没有结束的标签被跳过直到输入结束:<hello
- HTML 和 XML 实体不解码。它们必须通过单独的函数处理。
- 文本中的空白被压缩或根据特定规则插入。
- 开头和结尾的空白被移除。
- 连续的空白被压缩。
- 但是如果文本被其他元素分隔并且没有空白,则插入空白。
- 这可能导致不自然的示例:
Hello<b>world</b>
,Hello<!-- -->world
- 在 HTML 中没有空白,但该函数插入了空白。还要考虑:Hello<p>world</p>
,Hello<br>world
。这种行为对于数据分析是合理的,例如,将 HTML 转换为单词袋。
- 另外注意,正确处理空白需要支持
<pre></pre>
和 CSSdisplay
和white-space
属性。
语法
参数
x
— 输入文本。 String。
返回值
- 提取的文本。 String。
示例
第一个示例包含几个标签和一个注释,并且还展示了空白处理。 第二个示例展示了 CDATA 和 script 标签处理。 在第三个示例中,文本是从通过 url 函数接收到的完整 HTML 响应中提取的。
结果:
ascii
返回字符串 s
第一个字符的 ASCII 码点 (以 Int32 表示)。
如果 s
为空,结果为 0。如果第一个字符不是 ASCII 字符或不在 UTF-16 的 Latin-1 supplements 范围内,结果是未定义的。
语法
soundex
返回字符串的 Soundex 码。
语法
参数
val
— 输入值。 String
返回值
- 输入值的 Soundex 码。 String
示例
结果:
punycodeEncode
返回字符串的 Punycode 表示。 字符串必须是 UTF8 编码的,否则行为是未定义的。
语法
参数
val
— 输入值。 String
返回值
- 输入值的 Punycode 表示。 String
示例
结果:
punycodeDecode
返回 Punycode 编码字符串的 UTF8 编码明文。 如果没有提供有效的 Punycode 编码字符串,则会抛出异常。
语法
参数
val
— Punycode 编码字符串。 String
返回值
- 输入值的明文。 String
示例
结果:
tryPunycodeDecode
像 punycodeDecode
,但如果没有提供有效的 Punycode 编码字符串,则返回空字符串。
idnaEncode
返回域名的 ASCII 表示 (ToASCII 算法),根据 国际化域名应用 (IDNA) 机制。 输入字符串必须是 UTF 编码,并且可转换为 ASCII 字符串,否则将抛出异常。 注意:不进行百分比解码或去除制表符、空格或控制字符。
语法
参数
val
— 输入值。 String
返回值
- 根据 IDNA 机制的输入值的 ASCII 表示。 String
示例
结果:
tryIdnaEncode
像 idnaEncode
但在发生错误时返回空字符串而不是抛出异常。
idnaDecode
返回域名的 Unicode (UTF-8) 表示 (ToUnicode 算法),根据 国际化域名应用 (IDNA) 机制。
在发生错误时(例如,因为输入无效),返回输入字符串。
请注意,idnaEncode()
和 idnaDecode()
的重复应用不一定返回原始字符串,原因是大小写归一化。
语法
参数
val
— 输入值。 String
返回值
- 根据 IDNA 机制的输入值的 Unicode (UTF-8) 表示。 String
示例
结果:
byteHammingDistance
计算两个字节字符串之间的 汉明距离。
语法
示例
结果:
别名: mismatches
stringJaccardIndex
计算两个字节字符串之间的 Jaccard 相似度指数。
语法
示例
结果:
stringJaccardIndexUTF8
像 stringJaccardIndex 但针对 UTF8 编码字符串。
editDistance
计算两个字节字符串之间的 编辑距离。
语法
示例
结果:
别名: levenshteinDistance
editDistanceUTF8
计算两个 UTF8 字符串之间的 编辑距离。
语法
示例
结果:
别名: levenshteinDistanceUTF8
damerauLevenshteinDistance
计算两个字节字符串之间的 Damerau-Levenshtein 距离。
语法
示例
结果:
jaroSimilarity
计算两个字节字符串之间的 Jaro 相似度。
语法
示例
结果:
jaroWinklerSimilarity
计算两个字节字符串之间的 Jaro-Winkler 相似度。
语法
示例
结果:
initcap
将每个单词的首字母转换为大写,其余字母转换为小写。单词是由非字母数字字符分隔的字母数字字符序列。
因为 initCap
仅将每个单词的首字母转换为大写,可能会对带有撇号或大写字母的单词产生意想不到的行为。例如:
将返回
这是一个已知行为,目前没有计划进行修复。
语法
参数
val
— 输入值。 String。
返回值
val
的每个单词首字母转换为大写。 String。
示例
查询:
结果:
initcapUTF8
像 initcap,initcapUTF8
将每个单词的首字母转换为大写,其余字母转换为小写。假设字符串包含有效的 UTF-8 编码文本。
如果这个假设被违反,不会抛出异常,并且结果是未定义的。
此函数不检测语言,例如对于土耳其语,结果可能不完全正确 (i/İ vs. i/I)。 如果 UTF-8 字节序列的长度在大写和小写的代码点之间不同,则该代码点的结果可能不正确。
语法
参数
val
— 输入值。 String。
返回值
val
的每个单词首字母转换为大写。 String。
示例
查询:
结果:
firstLine
返回多行字符串的第一行。
语法
参数
val
— 输入值。 String
返回值
- 输入值的第一行,如果没有换行符则返回整个值。 String
示例
结果:
stringCompare
对两个字符串进行字典顺序比较。
语法
参数
string1
— 第一个要比较的字符串。 Stringstring2
- 第二个要比较的字符串。Stringstring1_offset
— 在string1
中进行比较的起始位置(零基)。可选,正数。string2_offset
— 在string2
中进行比较的起始位置(零基索引)。可选,正数。num_bytes
— 要比较的最大字节数。如果string_offset
+num_bytes
超过输入字符串的末尾,则num_bytes
将相应减少。
返回值
- -1 — 如果
string1
[string1_offset
:string1_offset
+num_bytes
] <string2
[string2_offset
:string2_offset
+num_bytes
] 并且string1_offset
< len(string1
) 和string2_offset
< len(string2
)。 如果string1_offset
>= len(string1
) 并且string2_offset
< len(string2
)。 - 0 — 如果
string1
[string1_offset
:string1_offset
+num_bytes
] =string2
[string2_offset
:string2_offset
+num_bytes
] 并且string1_offset
< len(string1
) 和string2_offset
< len(string2
)。 如果string1_offset
>= len(string1
) 并且string2_offset
>= len(string2
)。 - 1 — 如果
string1
[string1_offset
:string1_offset
+num_bytes
] >string2
[string2_offset
:string2_offset
+num_bytes
] 并且string1_offset
< len(string1
) 和string2_offset
< len(string2
)。 如果string1_offset
< len(string1
) 并且string2_offset
>= len(string2
)。
示例
结果:
结果:
sparseGrams
寻找给定字符串中所有长度至少为 n
的子字符串,
其中子字符串边界处的 (n-1)-grams 的哈希值严格大于任何 (n-1)-gram 内部的哈希值。
使用 crc32 作为哈希函数。
语法
参数
s
— 输入字符串。 Stringmin_ngram_length
— 提取的 ngram 的最小长度。默认和最小值为 3。max_ngram_length
— 提取的 ngram 的最大长度。默认值为 100。应不小于 'min_ngram_length'
返回值
示例
结果:
sparseGramsUTF8
寻找给定字符串中所有长度至少为 n
的子字符串,
其中子字符串边界处的 (n-1)-grams 的哈希值严格大于任何 (n-1)-gram 内部的哈希值。
使用 crc32 作为哈希函数。
期望 UTF-8 字符串,在无效 UTF-8 序列的情况下抛出异常。
语法
参数
s
— 输入字符串。 Stringmin_ngram_length
— 提取的 ngram 的最小长度。默认和最小值为 3。max_ngram_length
— 提取的 ngram 的最大长度。默认值为 100。应不小于 'min_ngram_length'
返回值
示例
结果:
sparseGramsHashes
寻找给定字符串中所有长度至少为 n
的子字符串,
其中子字符串边界处的 (n-1)-grams 的哈希值严格大于任何 (n-1)-gram 内部的哈希值。
使用 crc32 作为哈希函数。
语法
参数
s
— 输入字符串。 Stringmin_ngram_length
— 提取的 ngram 的最小长度。默认和最小值为 3。max_ngram_length
— 提取的 ngram 的最大长度。默认值为 100。应不小于 'min_ngram_length'
返回值
示例
结果:
sparseGramsHashesUTF8
寻找给定字符串中所有长度至少为 n
的子字符串,
其中子字符串边界处的 (n-1)-grams 的哈希值严格大于任何 (n-1)-gram 内部的哈希值。
使用 crc32 作为哈希函数。
期望 UTF-8 字符串,在无效 UTF-8 序列的情况下抛出异常。
语法
参数
s
— 输入字符串。 Stringmin_ngram_length
— 提取的 ngram 的最小长度。默认和最小值为 3。max_ngram_length
— 提取的 ngram 的最大长度。默认值为 100。应不小于 'min_ngram_length'
返回值
示例
结果:
stringBytesUniq
计算字符串中不同字节的数量。
语法
参数
s
— 要分析的字符串。 String。
返回值
- 字符串中不同字节的数量。 UInt16。
示例
结果:
stringBytesEntropy
计算字符串中字节分布的香农熵。
语法
参数
s
— 要分析的字符串。 String。
返回值
- 字符串中字节分布的香农熵。 Float64。
示例
结果: