我想获得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];
但这对于获得单个字符似乎过分,而不是使用向量的其余部分。
答案 0 :(得分:48)
UTF-8没有定义&#34;字符&#34;是这样取决于你想要什么。在这种情况下,char
是Unicode标量值,因此char
的第一个&str
将在1到4个字节之间。
如果您只想要第一个char
,那么请不要收集到Vec<char>
,只需使用迭代器:
let text = "hello world!";
let ch = text.chars().next().unwrap();
答案 1 :(得分:1)
我写了一个函数,它返回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)
}
的头部,其余部分:
let (first_char, remainder) = car_cdr("test");
println!("first char: {}\nremainder: {}", first_char, remainder);
像这样使用:
first char: t
remainder: est
输出如下:
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item active">
<a class="nav-link" id="home" href="#">HOME</a>
</li>
<li class="nav-item">
<a class="nav-link" id="portfolio" href="#">PORTFOLIO</a>
</li>
<li class="nav-item">
<a class="nav-link" id="about" href="#">ABOUT</a>
</li>
<li class="nav-item">
<a class="nav-link" id="contact" href="#">CONTACT</a>
</li>
</ul>
</div>
对于超过1个字节的字符,它可以正常工作。
答案 2 :(得分:-1)
let my_string = String::from("Rust");
let first_one = &my_string[0..1].to_string();
let first_two = &my_string[0..2].to_string();
let last_one = &my_string[my_string.len() - 1..].to_string();
let last_two = &my_string[my_string.len() - 2..].to_string();
println!("first one: {}", first_one);
println!("first two: {}", first_two);
println!("");
println!("last one: {}", last_one);
println!("last one: {}", last_two);
println!("");
let date = String::from("2020-12-01");
let day = &date[date.len() - 2..date.len()].to_string();
let month = &date[5..7].to_string();
let year = &date[0..4].to_string();
println!("day: {}", day);
println!("month: {}", month);
println!("year: {}", year);
输出
first one: R
first two: Ru
last one: t
last one: st
day: 01
month: 12
year: 2020
警告:确保您具有String的那些索引
// if you put index out of range:
let first_ten = &my_string[0..10].to_string();
结果:错误:字节索引10超出字符串Rust
的范围
答案 3 :(得分:-5)
接受的答案有点难看!
let text = "hello world!";
let ch = &text[0..1]; // this returns "h"