Alex Garella
7th November 2023
Splitting a string in Rust is a straightforward task, thanks to the language's robust standard library. The str
type in Rust provides several methods to split a string in various ways. Let's explore some common methods with code examples.
The simplest way to split a string is by a specific character using the split
method. It returns an iterator over the substrings.
fn main() {
let text = "apple,banana,cherry";
let fruits: Vec<&str> = text.split(',').collect();
println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}
To split by a string pattern rather than a single character, you can use the split
method just as easily.
let text = "apple>>banana>>cherry";
let fruits: Vec<&str> = text.split(">>").collect();
println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
For more complex splitting logic, you can pass a closure to split
that determines the split logic.
fn main() {
let text = "apple1banana2cherry";
let fruits: Vec<&str> = text.split(|c: char| c.is_numeric()).collect();
println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}
The split_whitespace
method is a convenient way to split a string by whitespace.
fn main() {
let text = "apple banana cherry";
let fruits: Vec<&str> = text.split_whitespace().collect();
println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}
Sometimes you might want to split a string into two parts at the first occurrence of a pattern. The split_once
method is perfect for this.
fn main() {
let text = "apple,banana,cherry";
if let Some((first, rest)) = text.split_once(',') {
println!("First fruit: {}", first); // Output: "First fruit: apple"
println!("The rest: {}", rest); // Output: "The rest: banana,cherry"
}
}
Rust also allows splitting without omitting the pattern in the resulting substrings. The split_inclusive
method includes the pattern in the substrings after splitting.
fn main() {
let text = "apple,banana,cherry";
let fruits: Vec<&str> = text.split_inclusive(',').collect();
println!("{:?}", fruits); // Output: ["apple,", "banana,", "cherry"]
}
Be aware that split
methods will include empty substrings if there are consecutive split patterns.
fn main() {
let text = "apple,,banana,,,cherry";
let fruits: Vec<&str> = text.split(',').collect();
println!("{:?}", fruits); // Output: ["apple", "", "banana", "", "", "cherry"]
}
To avoid empty strings, you can use filter
to exclude them.
fn main() {
let text = "apple,,banana,,,cherry";
let fruits: Vec<&str> = text.split(',').filter(|&s| !s.is_empty()).collect();
println!("{:?}", fruits); // Output: ["apple", "banana", "cherry"]
}
Rust provides a variety of ways to split strings, accommodating both simple and complex scenarios. By leveraging these methods, you can manipulate and process strings effectively in your Rust applications. Remember to convert the resulting iterator into a collection type like a Vec
if you need to work with the results directly.