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:
張貼留言