隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

我的相片
目前從事軟體相關行業,喜歡閱讀、健身、喝調酒。習慣把遇到的問題記下來,每天做一些整理方便自己以後查。 Python、Rust、Kotlin等程式語言皆為自學,目前比較著重在Rust語言,歡迎一起討論。

2023年11月11日 星期六

Rust 字串split概述 - 字串切割


最近做Codewars做到一個很有趣的題目

需要做資料切割

但有時候怎麼切都覺得很奇怪,不知為什麼出現空白

做了一些研究寫下來當作心得

split

split被歸類在str下面

文件[1]這樣解釋split

一個用於字串切片的子字串的迭代器,由匹配的字元切割

翻譯成白話大概就是

會由匹配的字元分割一個字串切片,並且返回迭代器

    pub fn split<'a, P>(&'a self, pat: P) -> Split<'a, P>
    where
        P: Pattern<'a>,

self為一個str

pat通常會是一個char或是&str

返還一個Split迭代器


例子

舉一個簡單的例子

    let tmp = "Hello world";
    let mut res = tmp.split(" ");
    println!("Result: {:?}", res.next().unwrap());
    println!("Result: {:?}", res.next().unwrap());

第一行為Hello world

第二行為透過" "一個空白鍵分割字串

第三行及第四行,透過next獲取迭代器的值,並且使用unwrap把Some的值取出

最後出現

    Result: Hello
    Result: world


而如果透過"l"分割會發生什麼事?

    let tmp = "Hello world";
    let res = tmp.split("l");
    for i in res {
        println!("Result: {}", i);
    }

想得到答案是什麼嗎


答案:

    Result: He
    Result:
    Result: o wor
    Result: d

第一個結果He很好理解,就是透過分割第一個l後的第一個元素

第二個結果是"",因為兩個"l"之間沒有元素但又需要分割,因此出現空白

第三個o wor則是第二個l到第三個"l"之間的數

最後d則是第三個"l"之後的數值


參考資料

[1] https://doc.rust-lang.org/std/primitive.str.html#method.split

0 comments:

張貼留言