检查字符串是空还是空白

アレッ*_*ックス 17 rust

检查a)&str b)String的字符串是空的还是空白的正确方法是什么?我过去常常这样做"aaa".len() == 0,但我的直觉告诉我应该采取另一种方式吗?

Ger*_*ann 27

双方&strString呼吁的方法is_empty:

这是他们的使用方式:

assert_eq!("".is_empty(), true); // a)
assert_eq!(String::new().is_empty(), true); // b)
Run Code Online (Sandbox Code Playgroud)

  • @pyrho我相信这意味着要显示`&str`和`String`都有`is_empty()`方法. (8认同)
  • 仅供参考,`"".to_string()` 不会导致分配(至少在当前的 Rust 中)。根据 Rust 源代码 https://doc.rust-lang.org/src/alloc/raw_vec.rs.html#94-96,它转换为不分配的 `RawVec::with_capacity(0)`。 (5认同)

tro*_*zen 16

可以使用以下方法检查空字符串或仅空白字符串:

s.trim().is_empty()
Run Code Online (Sandbox Code Playgroud)

wheretrim()返回从字符串的开头和结尾删除空白字符的切片(https://doc.rust-lang.org/stable/std/primitive.str.html#method.trim)。

  • 我预计这不会表现得很好,但后来我查看了源码。好答案! (5认同)

小智 5

其他人已经回应,Collection.is_empty可以用来知道字符串是否为空,但假设“是空白”你的意思是“仅由空格组成”,那么你想要的UnicodeStrSlice.is_whitespace(),这对于空字符串和仅由字符组成的字符串都是如此unicodeWhite_Space属性集。

只有字符串切片实现UnicodeStrSlice,因此.as_slice()如果您从String.

TL;博士:s.is_whitespace()如果s: &strs.as_slice().is_whitespace()如果s: String