我想得到一个第一个角色std::str.该方法char_at()目前是不稳定的,如slice_chars在std::string::String.
我目前唯一提出的选择如下.
let text = "hello world!";
let char_vec:Vec<char> = text.chars().collect();
let ch = char_vec[0];
Run Code Online (Sandbox Code Playgroud)
但这对于获得单个字符似乎过分,而不是使用向量的其余部分.
Ste*_*nik 60
UTF-8没有定义"字符"是什么,所以它取决于你想要的.在这种情况下,chars是Unicode标量值,因此a的第char一个&str将在1到4个字节之间.
如果你只想要第一个char,那么不要收集到一个Vec<char>,只需使用迭代器:
let text = "hello world!";
let ch = text.chars().next().unwrap();
Run Code Online (Sandbox Code Playgroud)
Dar*_*ter 10
If you only want to test for it, you can use starts_with():
"rust".starts_with('r')
"rust".starts_with(|c| c == 'r')
Run Code Online (Sandbox Code Playgroud)
小智 6
我编写了一个返回 a 的头部&str和其余部分的函数:
fn car_cdr(s: &str) -> (&str, &str) {
for i in 1..5 {
let r = s.get(0..i);
match r {
Some(x) => return (x, &s[i..]),
None => (),
}
}
(&s[0..0], s)
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
let (first_char, remainder) = car_cdr("test");
println!("first char: {}\nremainder: {}", first_char, remainder);
Run Code Online (Sandbox Code Playgroud)
输出看起来像:
fn car_cdr(s: &str) -> (&str, &str) {
for i in 1..5 {
let r = s.get(0..i);
match r {
Some(x) => return (x, &s[i..]),
None => (),
}
}
(&s[0..0], s)
}
Run Code Online (Sandbox Code Playgroud)
它适用于超过 1 个字节的字符。
| 归档时间: |
|
| 查看次数: |
24138 次 |
| 最近记录: |