处理字符串
A string 类型表示一个字符序列。
字符串是不可变的,一旦创建就无法修改。
类型名称: string
字符串语法
一个 字符串 字面量由一系列用双引号 (") 括起来的字符表示。任何字符都可以出现在字符串字面量中,除了未转义的双引号。字符串字面量支持几种 转义序列 和 使用 \x 作为前缀的十六进制编码。
"abc"
"string with double \" quote"
"string with backslash \\"
"日本語"
"\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"
将数据类型转换为字符串
使用 string() 函数 将其他 基本类型 转换为字符串:
- 布尔值
- 字节
- 持续时间
- 浮点数
- 整数
- uint
- 时间
string(v: 42)
// Returns "42"
将正则表达式转换为字符串
要将一个 正则表达式 转换为字符串:
- 导入
regexp包。 - 使用
regexp.getString()并提供 用于转换为字符串的正则表达式。
import "regexp"
regexp.getString(r: /[a-zA-Z]/)
// Returns [a-zA-Z] (string)
将数据类型转换为十六进制字符串
将 基本类型 转换为十六进制字符串:
- 导入
contrib/bonitoo-io/hex包。 - 使用
hex.string()将其他值转换为十六进制字符串。
import "contrib/bonitoo-io/hex"
hex.string(v: 123456)
// Returns 1e240
将列转换为字符串
Flux 让你在 表流 中迭代行并将列转换为字符串。
将 _value 列转换为字符串,使用 toString() 函数。
toString() 仅操作 _value 列。
data
|> toString()
给定以下输入数据:
| _时间 | _值 (int) |
|---|---|
| 2021-01-01T00:00:00Z | 1 |
| 2021-01-01T02:00:00Z | 2 |
| 2021-01-01T03:00:00Z | 3 |
| 2021-01-01T04:00:00Z | 4 |
上面的例子返回:
| _时间 | _值 (字符串) |
|---|---|
| 2021-01-01T00:00:00Z | 1 |
| 2021-01-01T02:00:00Z | 2 |
| 2021-01-01T03:00:00Z | 3 |
| 2021-01-01T04:00:00Z | 4 |
将任何列转换为字符串:
data
|> map(fn: (r) => ({ r with level: string(v: r.level) }))
给定以下输入数据:
| _时间 | 级别 (int) |
|---|---|
| 2021-01-01T00:00:00Z | 1 |
| 2021-01-01T02:00:00Z | 2 |
| 2021-01-01T03:00:00Z | 3 |
| 2021-01-01T04:00:00Z | 4 |
上面的例子返回:
| _时间 | 级别 (字符串) |
|---|---|
| 2021-01-01T00:00:00Z | 1 |
| 2021-01-01T02:00:00Z | 2 |
| 2021-01-01T03:00:00Z | 3 |
| 2021-01-01T04:00:00Z | 4 |
对字符串进行操作
在Flux strings package中使用函数执行包括以下内容的操作:
插值字符串
要在另一个Flux字符串中插入字符串,请将嵌入的 expressions 包裹在美元符号和花括号中 ${}。Flux用嵌入表达式的结果替换占位符并返回字符串文字。
name = "John"
"My name is ${name}."
// My name is John.
d = 1m
"the answer is ${d}"
// the answer is 1m
t0 = 2016-06-13T17:43:50Z
"the answer is ${t0}"
// the answer is 2016-06-13T17:43:50.000000000Z
p = {name: "John", age: 42}
"My name is ${p.name} and I'm ${p.age} years old."
// My name is John and I'm 42 years old.
字符串插值表达式必须满足 可字符串化约束.
连接字符串
要连接Flux字符串,使用字符串值或
表达式之间的+运算符,这些表达式解析为字符串。
Flux解析表达式并返回一个单一的连接字符串。
连接的表达式必须解析为字符串。
name = "John"
"My name is " + name + "."
// My name is John.
d = 1m
"the answer is " + string(v: d)
// the answer is 1m
t0 = 2016-06-13T17:43:50Z
"the answer is " + string(v: t0)
// the answer is 2016-06-13T17:43:50.000000000Z
p = {name: "John", age: 42}
"My name is " + p.name + " and I'm " + string(v: p.age) + " years old."
// My name is John and I'm 42 years old.