我很难弄清楚Rust中的字符串语法是如何工作的。具体地说,我试图弄清楚如何使一个多行字符串。
当前回答
如果你想做一些更长的事情,可能包括也可能不包括引号,反斜杠等,使用原始字符串文字表示法:
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
如果你的字符串中有双引号和哈希符号的序列,你可以表示任意数量的哈希作为分隔符:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
输出:
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
操场上的链接
其他回答
如果你想在你的代码中缩进多行文本:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
结果如下:
Multiline text goes next:
first line
second line
third line
Huon的答案是正确的,但如果缩进让您感到困扰,可以考虑使用Indoc,这是一个用于缩进多行字符串的过程宏。它代表“缩进文件”。它提供了一个名为indoc!()的宏,该宏接受一个多行字符串字面值并取消缩进,使最左边的非空格字符位于第一列中。
let s = indoc! {"
line one
line two
"};
结果是“第一行,第2行,第n行”。
空白相对于文档中最左边的非空格字符被保留,因此下面的第二行相对于第一行有缩进的3个空格:
let s = indoc! {"
line one
line two
"};
结果是“第一行,第2行,第n行”。
如果你想做一些更长的事情,可能包括也可能不包括引号,反斜杠等,使用原始字符串文字表示法:
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
如果你的字符串中有双引号和哈希符号的序列,你可以表示任意数量的哈希作为分隔符:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
输出:
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
操场上的链接
所有的字符串字面量都可以分成几行;例如:
let string = "line one
line two";
是一个两行字符串,与"第一行\nline 2 "相同(当然也可以直接使用\n换行转义)。如果出于格式化的原因,你想跨多行分割字符串,你可以用\;例如:
let string = "one line \
written over \
several";
相当于“一行写几行”。
如果你想在字符串中添加换行符,你可以在\:
let string = "multiple\n\
lines\n\
with\n\
indentation";
它与“multiple\nlines\nwith\nindentation”相同;
如果您想在不使用外部板条箱的情况下对多行字符串中的空格进行细粒度控制,可以执行以下操作。例子来自我自己的项目。
impl Display for OCPRecData {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "OCPRecData {{\n\
\x20 msg: {:?}\n\
\x20 device_name: {:?}\n\
\x20 parent_device_name: {:?}\n\
}}", self.msg, self.device_name, self.parent_device_name)
}
}
结果
OCPRecData {
msg: Some("Hello World")
device_name: None
parent_device_name: None
}
\n\在每个代码行的末尾在适当的位置创建一个换行符,并在这行代码中丢弃进一步的空格 \ x20(十六进制;32(十进制)是一个ASCII空格,是字符串中第一个要保留的空格的指示器 \x20\x20\x20\x20和\x20具有相同的效果
推荐文章
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- 用javascript检查输入字符串中是否包含数字
- Java:检查enum是否包含给定的字符串?
- 用PHP删除字符串的前4个字符
- JavaScript错误(Uncaught SyntaxError:意外的输入结束)
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何从字符串的开始或结束删除所有空白?
- 字符串到JS中的对象
- 为什么Python的原始字符串不能以一个反斜杠结尾?
- 我如何读整个文件到性病::字符串在c++ ?
- 从以特定字符开头的字符串中获取子字符串
- 如何用前导零格式化Java字符串?
- Android Split字符串
- 重复字符串到一定长度