是否可以编写如下内容:
fn main() {
let my_string: &str = "Testing for new lines \
might work like this?";
}
答案 0 :(得分:33)
如果我正确地阅读了language reference,那么看起来应该可行。语言引用表明支持\n
等(作为常见的转义,用于在换行符中插入换行符),以及包含LF,CR和HT的“附加转义”。
答案 1 :(得分:32)
另一种方法是使用raw string literal:
原始字符串文字不处理任何转义。他们从开始 字符
U+0072
(r
),后跟零个或多个字符U+0023
(#
)和U+0022
(双引号)字符。原始弦体可以 包含任何Unicode字符序列,并且仅由 另一个U+0022
(双引号)字符,后跟相同的数字 在开幕U+0023
之前的U+0022
(#)个字符 (双引号)字符。原始字符串主体中包含的所有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
答案 2 :(得分:2)
在Rust 中编写具有不同结果的多行字符串有两种方法。您应该谨慎地选择它们,具体取决于您要完成的任务。
方法1:悬空空白
如果以"
开头的字符串包含文字换行符,则Rust编译器将“吞噬”该行的最后一个非空白字符与下一行的第一个非空白字符之间的所有空格,并用一个替换它们。
示例:
fn test() {
println!("{}", "hello
world");
}
无论在之后出现多少文字
hello
(空格)字符(零或一百),上述输出始终为hello world
。
方法2:反斜杠换行符
这恰恰相反。在此模式下,保留第一行文字\
之前的所有空格,并保留 next 行中的所有后续空格。
示例:
fn test() {
println!("{}", "hello \
world");
}
在此示例中,输出为hello world
。
此外,正如另一个答案中所提到的,Rust有“原始文字”字符串,但是他们没有像Rust那样进入这个讨论(不像其他一些需要诉诸原始字符串的语言)支持文字换行符引用内容没有限制,我们可以在上面看到。
答案 3 :(得分:1)
每一行都是Rust中的多行。
但是如果您的文字中有缩进,例如:
fn my_func() {
const MY_CONST: &str = "\
Hi!
This is a multiline text!
";
}
但是您将获得不必要的空格。要删除它们,您可以使用indoc!
板条箱中的indoc
宏来删除所有缩进:https://github.com/dtolnay/indoc
答案 4 :(得分:0)
如果您想避免使用换行符和多余的空格,可以使用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?");
答案 5 :(得分:-1)
这样做:
fn main() {
let multiline = r#"this
is
"multiline"
text
"#;
println!("{}", multiline);
}
确保将 r#
放在开头,将 #
放在结尾。您可以使用 br#"..."#