是否有可能编写类似这样的代码:
fn main() {
let my_string: &str = "Testing for new lines \
might work like this?";
}
是否有可能编写类似这样的代码:
fn main() {
let my_string: &str = "Testing for new lines \
might work like this?";
}
\n
等被支持(作为常见转义字符,用于将换行符插入字符串中),还包括“其他转义字符”,包括LF、CR和HT。另一种方法是使用原始字符串字面量:
原始字符串字面量不处理任何转义。它们以字符
U+0072
(r
)开头,后跟零个或多个字符U+0023
(#
)和一个U+0022
(双引号)字符。原始字符串主体可以包含任何Unicode字符序列,并且仅由另一个U+0022
(双引号)字符终止,后跟与打开的U+0022
(双引号)字符之前使用的相同数量的U+0023
(#)字符。原始字符串主体中包含的所有Unicode字符都表示它们本身,字符
U+0022
(双引号)(除非紧随其后至少使用与开始原始字符串字面量时相同数量的U+0023
(#
)字符),或字符U+005C
(\
)没有任何特殊含义。字符串字面量示例:
抱歉,我现在只能用英文进行交流。
"foo"; r"foo"; // foo "\"foo\""; r#""foo""#; // "foo" "foo #\"# bar"; r##"foo #"# bar"##; // foo #"# bar "\x52"; "R"; r"R"; // R "\\x52"; r"\x52"; // \x52
如果您想避免出现换行符和额外的空格,可以使用 concat!
宏。它可以在编译时将字符串字面量连接起来。
let my_string = concat!(
"Testing for new lines ",
"might work like this?",
);
assert_eq!(my_string, "Testing for new lines might work like this?");
带反斜杠的被接受的答案同样也去除了多余的空格。
在 Rust 中每个字符串都是多行字符串。
但是,如果你的文本中有缩进,例如:
fn my_func() {
const MY_CONST: &str = "\
Hi!
This is a multiline text!
";
}
如果不处理,您可能会得到不必要的空格。为了去除它们,可以使用来自indoc
包的 indoc!
宏来移除所有缩进: https://github.com/dtolnay/indoc
在Rust中,有两种编写多行字符串的方式会产生不同的结果。根据你想要实现的目标,你应该仔细选择它们之间的区别。
方法1:悬挂空格
如果以"
开头的字符串包含一个文字换行符,Rust编译器将“吞噬”该行中最后一个非空白字符和下一行第一个非空白字符之间的所有空格,并用单个替换它们。
例如:
fn test() {
println!("{}", "hello
world");
}
fn test() {
println!("{}", "hello \
world");
}
hello world
。