注意:此问题包含1.0之前已弃用的代码!不过答案是正确的。
在Rust中将str转换为int,我可以这样做:
let my_int = from_str::<int>(my_str);
我知道如何将String转换为int的唯一方法是获取它的切片,然后使用from_str对它这样:
let my_int = from_str::<int>(my_string.as_slice());
是否有一种方法可以直接将字符串转换为int?
注意:此问题包含1.0之前已弃用的代码!不过答案是正确的。
在Rust中将str转换为int,我可以这样做:
let my_int = from_str::<int>(my_str);
我知道如何将String转换为int的唯一方法是获取它的切片,然后使用from_str对它这样:
let my_int = from_str::<int>(my_string.as_slice());
是否有一种方法可以直接将字符串转换为int?
当前回答
可以使用str::parse::<T>()方法直接转换为int类型,该方法返回一个包含int类型的Result。
let my_string = "27".to_string(); // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<i32>().unwrap();
你可以使用turbofish操作符(::<>)如上所示指定要解析的类型,也可以通过显式类型注释:
let my_int: i32 = my_string.parse().unwrap();
由于parse()返回一个Result,如果字符串不能被解析为指定的类型(例如,字符串"peter"不能被解析为i32),它将是一个Err,或者是一个Ok值。
其他回答
可以使用str::parse::<T>()方法直接转换为int类型,该方法返回一个包含int类型的Result。
let my_string = "27".to_string(); // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<i32>().unwrap();
你可以使用turbofish操作符(::<>)如上所示指定要解析的类型,也可以通过显式类型注释:
let my_int: i32 = my_string.parse().unwrap();
由于parse()返回一个Result,如果字符串不能被解析为指定的类型(例如,字符串"peter"不能被解析为i32),它将是一个Err,或者是一个Ok值。
let my_u8: u8 = "42".parse().unwrap();
let my_u32: u32 = "42".parse().unwrap();
// or, to be safe, match the `Err`
match "foobar".parse::<i32>() {
Ok(n) => do_something_with(n),
Err(e) => weep_and_moan(),
}
str::parse::<u32>返回一个Result<u32, core::num::ParseIntError>和Result::unwrap“打开一个结果,如果值是Err,则产生一个Ok[或]panic的内容,并由Err的值提供一个恐慌消息。”
Str::parse是一个泛型函数,因此类型在尖括号内。
如果你从stdin()中获取字符串。Read_line,你必须先修剪它。
let my_num: i32 = my_num.trim().parse()
.expect("please give me correct string number!");
你可以使用FromStr trait的from_str方法,这是为i32实现的:
let my_num = i32::from_str("9").unwrap_or(0);
所以基本上你想把一个字符串转换成一个整数! 这是我最常用的,在官方文件中也有提到。
fn main() {
let char = "23";
let char : i32 = char.trim().parse().unwrap();
println!("{}", char + 1);
}
这适用于String和&str 希望这也能有所帮助。