String 如何连接字符串?
如何连接以下类型组合:String 如何连接字符串?,string,rust,string-concatenation,String,Rust,String Concatenation,如何连接以下类型组合: str和str String和str String和String 连接字符串时,需要分配内存来存储结果。最简单的开始是String和&str: fn main(){ 让mut拥有\u string:string=“hello”; 让我们借用字符串:&str=“world”; 自有字符串。推字符串(借用字符串); println!(“{}”,拥有的字符串); } 在这里,我们拥有一个可以变异的字符串。这是有效的,因为它可能允许我们重用内存分配。String和String
和str
str
和String
str
和String
String
String
和&str
:
fn main(){
让mut拥有\u string:string=“hello”;
让我们借用字符串:&str=“world”;
自有字符串。推字符串(借用字符串);
println!(“{}”,拥有的字符串);
}
在这里,我们拥有一个可以变异的字符串。这是有效的,因为它可能允许我们重用内存分配。String
和String
的情况与&String
类似
fn main(){
让mut拥有\u string:string=“hello”;
让另一个拥有的字符串:string=“world”。to_owned();
拥有的字符串。推送字符串(&另一个拥有的字符串);
println!(“{}”,拥有的字符串);
}
在此之后,另一个\u拥有的\u字符串
未被触动(注意:没有mut
限定符)。还有另一个变体使用字符串
,但不要求它是可变的。这是一个将字符串
作为左侧,将&str
作为右侧的字符串:
fn main(){
let owned_string:string=“hello”。to_owned();
让我们借用字符串:&str=“world”;
让新的\u拥有的\u字符串=拥有的\u字符串+借用的\u字符串;
println!(“{}”,新的字符串);
}
请注意,调用+
后,无法再访问拥有的\u字符串
如果我们想产生一个新的字符串,让两者都保持不变呢?最简单的方法是使用:
fn main(){
让我们来看看字符串:&str=“hello”;
让另一个字符串:&str=“world”;
let together=format!(“{}{}”,借来的字符串,另一个借来的字符串);
//之后https://rust-lang.github.io/rfcs/2795-format-args-implicit-identifiers.html
//let together=format!(“{借用的字符串}{另一个借用的字符串}”);
println!(“{}”,一起);
}
请注意,这两个输入变量都是不可变的,因此我们知道它们不会被触及。如果我们想对字符串
的任何组合执行相同的操作,我们可以使用字符串
也可以格式化的事实:
fn main(){
let owned_string:string=“hello”。to_owned();
让另一个拥有的字符串:string=“world”。to_owned();
let together=format!(“{}{}”,拥有的_字符串,另一个_拥有的_字符串);
//之后https://rust-lang.github.io/rfcs/2795-format-args-implicit-identifiers.html
//let together=format!(“{owned_string}{other_owned_string}”);
println!(“{}”,一起);
}
您不必使用格式代码>不过。您可以将另一个字符串添加并附加到新字符串:
fn main(){
let owned_string:string=“hello”。to_owned();
让我们借用字符串:&str=“world”;
let together=owned_string.clone()+借用的_string;
println!(“{}”,一起);
}
注意-我所做的所有类型规范都是多余的-编译器可以推断出这里使用的所有类型。我添加这些问题只是为了让不熟悉锈蚀的人明白,因为我希望这个问题会受到该群体的欢迎 要将多个字符串连接成一个由另一个字符分隔的字符串,有两种方法
我见过的最好的方法是在数组上使用join
方法:
fn main() {
let a = "Hello";
let b = "world";
let result = [a, b].join("\n");
print!("{}", result);
}
根据您的用例,您可能还更喜欢控制:
fn main() {
let a = "Hello";
let b = "world";
let result = format!("{}\n{}", a, b);
print!("{}", result);
}
我见过一些更为手动的方法,有些方法在这里或那里避免一到两次分配。为了便于阅读,我认为以上两种方法已经足够了。我认为这里也应该提到方法和+
:
assert\u eq!(
(“My.to_owned()+“”+“string”),
[“我的”、“字符串”]。concat()
);
还有宏,但仅适用于文本:
s=concat!(“测试”,10,'b',正确);
断言!(s,“Test10b真实”);
在Rust中连接字符串的简单方法
Rust中有多种方法可用于连接字符串
第一种方法(使用concat!()
):
上述代码的输出为:
ab
第二种方法(使用push_str()
和+
运算符):
上述代码的输出为:
ab
abc
第三种方法(使用格式!()
):
上述代码的输出为:
ab
查看它并试用。2020更新:通过字符串插值进行连接
2019年10月27日发布的RFC 2795:
建议支持隐式参数,以实现许多人所知的“字符串插值”——一种在字符串中嵌入参数以连接参数的方法
RFC:
可在此处找到最新问题状态:
在撰写本文时(2020年9月24日),我相信Rust Nightly build中应该有此功能
这将允许您通过以下速记连接:
format_args!("hello {person}")
这相当于:
format_args!("hello {person}", person=person)
还有“ifmt”板条箱,它提供了自己的字符串插值类型:
请注意,str
和&str
是不同的类型,在99%的情况下,您只需要关心&str
。还有其他问题详细说明了它们之间的区别。这是否回答了您的问题?您如何看待添加/+
符号?如果你想的话,你可以把它写下来。也许这很简单,但是理解它需要查看“使用字符串添加”的可能类型签名。谢谢!您是否能够更深入地了解&String如何作为&str解除引用?它的实现的哪一部分允许这样做,和/或它在文档中的什么地方这样说?@jsalter这是
fn main() {
let mut _a = "a".to_string();
let _b = "b".to_string();
let _c = format!("{}{}", _a, _b);
println!("{}", _c);
}
format_args!("hello {person}")
format_args!("hello {person}", person=person)