How do I concatenate the following combinations of types:
str
and str
String
and str
String
and String
This question is related to
string
rust
string-concatenation
There are various methods available in Rust to concatenate strings
concat!()
):fn main() {
println!("{}", concat!("a", "b"))
}
The output of the above code is :
ab
push_str()
and +
operator):fn main() {
let mut _a = "a".to_string();
let _b = "b".to_string();
let _c = "c".to_string();
_a.push_str(&_b);
println!("{}", _a);
println!("{}", _a + &_c);
}
The output of the above code is:
ab
abc
Using format!()
):fn main() {
let mut _a = "a".to_string();
let _b = "b".to_string();
let _c = format!("{}{}", _a, _b);
println!("{}", _c);
}
The output of the above code is :
ab
Check it out and experiment with Rust playground.
2020 Update: Concatenation by String Interpolation
RFC 2795 issued 2019-10-27: Suggests support for implicit arguments to do what many people would know as "string interpolation" -- a way of embedding arguments within a string to concatenate them.
RFC: https://rust-lang.github.io/rfcs/2795-format-args-implicit-identifiers.html
Latest issue status can be found here: https://github.com/rust-lang/rust/issues/67984
At the time of this writing (2020-9-24), I believe this feature should be available in the Rust Nightly build.
This will allow you to concatenate via the following shorthand:
format_args!("hello {person}")
It is equivalent to this:
format_args!("hello {person}", person=person)
There is also the "ifmt" crate, which provides its own kind of string interpolation:
To concatenate multiple strings into a single string, separated by another character, there are a couple of ways.
The nicest I have seen is using the join
method on an array:
fn main() {
let a = "Hello";
let b = "world";
let result = [a, b].join("\n");
print!("{}", result);
}
Depending on your use case you might also prefer more control:
fn main() {
let a = "Hello";
let b = "world";
let result = format!("{}\n{}", a, b);
print!("{}", result);
}
There are some more manual ways I have seen, some avoiding one or two allocations here and there. For readability purposes I find the above two to be sufficient.
Source: Stackoverflow.com