【问题标题】:Split string only once in Rust在 Rust 中只拆分字符串一次
【发布时间】:2017-01-07 02:26:50
【问题描述】:

我只想通过分隔符将字符串拆分一次并将其放入元组中。我试过做

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)
}

但我一直被告知second 的寿命不够长。我想这是因为splitter 只存在于功能块内部,但我不确定如何解决这个问题。如何强制 second 进入功能块之外的存在?或者有没有更好的方法将字符串只拆分一次?

【问题讨论】:

    标签: rust


    【解决方案1】:

    您正在寻找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)
    }
    

    请注意,Rust 使用 snake_case


    我猜是因为 splitter 只存在于功能块内部

    不,这是因为您创建了 String 并试图返回对它的引用; you cannot do thatsecond 的寿命不够长。

    如何强制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)
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 2014-12-25
      • 2011-02-22
      • 1970-01-01
      • 2017-12-15
      • 2019-10-19
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多