我想只用分隔符将字符串拆分一次并将其放入元组中.我试过了
fn splitOnce(in_string: &str) -> (&str, &str) {
let mut splitter = in_string.split(':');
let first = splitter.next().unwrap();
let second = splitter.fold("".to_string(), |a, b| a + b);
(first, &second)
}
Run Code Online (Sandbox Code Playgroud)
但我一直被告知,second活得不够久.我想这是因为splitter它只存在于功能块内部,但我不确定如何解决这个问题.如何强制second进入功能块之外的现有?或者是否有更好的方法只分裂一次字符串?
Car*_*lsh 10
str::split_once现在是内置的。
文档示例:
assert_eq!("cfg".split_once('='), None);
assert_eq!("cfg=".split_once('='), Some(("cfg", "")));
assert_eq!("cfg=foo".split_once('='), Some(("cfg", "foo")));
assert_eq!("cfg=foo=bar".split_once('='), Some(("cfg", "foo=bar")));
Run Code Online (Sandbox Code Playgroud)
您正在寻找str::splitn:
fn split_once(in_string: &str) -> (&str, &str) {
let mut splitter = in_string.splitn(2, ':');
let first = splitter.next().unwrap();
let second = splitter.next().unwrap();
(first, second)
}
fn main() {
let (a, b) = split_once("hello:world:earth");
println!("{} --- {}", a, b)
}
Run Code Online (Sandbox Code Playgroud)
请注意Rust使用snake_case.
我想这是因为分割器只存在于功能块内部
不,这是因为你创建了一个String并试图返回它的引用; 你不能这样做.second是不够长寿的东西.
如何强制
second进入功能块之外的现有?
你没有.这是Rust的一个基本方面.如果某些东西需要活一段时间,你只需要让它存在那么长时间.在这种情况下,如在链接问题中,您将返回String:
fn split_once(in_string: &str) -> (&str, String) {
let mut splitter = in_string.split(':');
let first = splitter.next().unwrap();
let second = splitter.fold("".to_string(), |a, b| a + b);
(first, second)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |