注意:此问题包含已弃用的1.0之前的代码!答案是正确的.
要将一个转换str为一个int在Rust中,我可以这样做:
let my_int = from_str::<int>(my_str);
Run Code Online (Sandbox Code Playgroud)
我知道如何将一个转换的唯一方法String到int是得到它的一个切片,然后用from_str它像这样:
let my_int = from_str::<int>(my_string.as_slice());
Run Code Online (Sandbox Code Playgroud)
有没有办法直接将a转换String为int?
小智 192
您可以使用该str::parse::<T>()方法直接转换为int .
let my_string = "27".to_string(); // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<i32>().unwrap();
Run Code Online (Sandbox Code Playgroud)
您可以使用::<>上面显示的turbofish operator()或通过显式类型注释指定要解析的类型:
let my_int: i32 = my_string.parse().unwrap();
Run Code Online (Sandbox Code Playgroud)
如评论中所述,parse()返回a Result.Err如果无法将字符串解析为指定的类型(例如,"peter"无法将字符串解析为i32),则此结果将是.
Jar*_*eck 41
let my_u8: u8 = "42".parse::<u8>().unwrap();
let my_u32: u32 = "42".parse::<u32>().unwrap();
// or, to be safe, match the `Err`
match "foobar".parse::<i32>() {
Ok(n) => do_something_with(n),
Err(e) => weep_and_moan(),
}
Run Code Online (Sandbox Code Playgroud)
parse返回a core::result::Result<u32, core::num::ParseIntError>并unwrap"将值v移出Option,如果它是Some(v)[或] Panics,如果self值等于None".
小智 23
如果您从 中获取字符串stdin().read_line,则必须先修剪它。
let my_num: i32 = my_num.trim().parse()
.expect("please give me correct string number!");
Run Code Online (Sandbox Code Playgroud)
小智 11
是的,您可以在字符串上使用 parse 方法将其直接转换为整数,如下所示:
let my_string = "42".to_string();
let my_int = my_string.parse::<i32>().unwrap();
Run Code Online (Sandbox Code Playgroud)
parse方法返回一个Result对象,因此您需要处理字符串无法解析为整数的情况。如果解析成功,您可以使用上面所示的 unwrap 来获取值,否则如果解析失败,则会出现混乱。
或者您可以使用匹配表达式分别处理成功和失败的情况,如下所示:
let my_string = "42".to_string();
let my_int = match my_string.parse::<i32>() {
Ok(n) => n,
Err(_) => {
println!("Failed to parse integer");
0
},
};
Run Code Online (Sandbox Code Playgroud)
仅供参考,parse 方法可用于实现 FromStr 特征的任何类型,其中包括所有整数类型(例如 i32、i64 等)以及许多其他类型,例如 f32 和 bool。
最近每晚,您可以这样做:
let my_int = from_str::<int>(&*my_string);
Run Code Online (Sandbox Code Playgroud)
这里发生的事情String现在可以被解除引用str.但是,功能想要一个&str,所以我们必须再次借用.作为参考,我相信这个特殊模式(&*)被称为"交叉借用".
您可以使用FromStrtrait 的from_str方法,该方法为i32:
let my_num = i32::from_str("9").unwrap_or(0);
Run Code Online (Sandbox Code Playgroud)