隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

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

2023年11月12日 星期日

Rust 字串split_whitespace概述 - 以空白字串切割


之前常常用split(" ")當作切割方法

但某一次遇到問題

原本一直以為這兩個會一樣

研究一下才發現split(" ") 和 split_whitespace還是有一些區別

在某些題目上可能會出現問題


split_whitespace 

split_whitespace 被歸類在str下

文件[1]這樣寫

透過空白鍵切割,並返回一個迭代器

可以透過任意數量空白鍵分割

並且可以對\t \n分割

    pub fn split_whitespace(&self) -> SplitWhitespace<'_>

self為字串,返還一個SplitWhitespace


假設有一個字串Hello world

透過split_whitespace分割會長這樣

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

第一行為字串切片

第二行透過split_whitespace分割

第三行與第四行則是呈現結果


如果這行程式碼使用split(" ")結果會一樣

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


但如果這次將字串切片改成

    let tmp = " Mary   had\ta\u{2009}little  \n\t lamb";
    let mut res = tmp.split(" ");
    for i in res {
        println!("Result: {}", i);
    }

使用split所呈現結果就會長

Result:
Result: Mary
Result:
Result:
Result: had     a little
Result:
Result:

Result: lamb

不僅出現許多空白結果

換行、TAB都不能正常分割


而如果使用split_whitespace

則可以將空白格、換行符號\n、Tab\t以及空格\u{2009}等等都會正常分割

    let tmp = " Mary   had\ta\u{2009}little  \n\t lamb";
    let mut res = tmp.split_whitespace();
    for i in res {
        println!("Result: {}", i);
    }
Result: Mary Result: had Result: a Result: little Result: lamb

可看出結果跟想要的一樣


參考資料

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

[2] LaGee-Blog: Rust 字串split概述 - 字串切割 (lageeblog.blogspot.com)

0 comments:

張貼留言