在Rust中将字符串转换为int吗?

Convert a String to int in Rust?

注意:此问题包含1.0版之前的代码! 答案是正确的。

要将Rust中的str转换为int,我可以这样做:

1
let my_int = from_str::<int>(my_str);

我知道如何将String转换为int的唯一方法是获取它的切片,然后像这样使用from_str

1
let my_int = from_str::<int>(my_string.as_slice());

有没有一种方法可以直接将String转换为int


您可以使用str::parse::< T >()方法直接转换为int。

1
2
let my_string ="27".to_string();  // `parse()` works with `&str` and `String`!
let my_int = my_string.parse::<i32>().unwrap();

您可以使用上图所示的turbofish运算符(::<>)指定要解析的类型,也可以通过显式类型注释:

1
let my_int: i32 = my_string.parse().unwrap();

如注释中所述,parse()返回Result。如果无法将字符串解析为指定的类型(例如,字符串"peter"不能解析为i32),则结果为Err


1
2
3
4
5
6
7
8
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(),
}

parse返回core::result::Resultunwrap"将值v从Option移出Some(v)[或]如果self值等于None则恐慌"。

parse是通用函数,因此在尖括号中输入类型。


对于最近的每晚,您可以执行以下操作:

1
let my_int = from_str::<int>(&*my_string);

这里发生的事情是现在可以将String取消引用到str中。但是,该函数需要&str,因此我们必须再次借用。作为参考,我相信这种特定的模式(&*)被称为"交叉借用"。


如果从stdin().read_line获取字符串,则必须先对其进行修剪。

1
2
let my_num: i32 = my_num.trim().parse()
   .expect("please give me correct string number!");

您可以使用FromStr特征的from_str方法,该方法是为i32实现的:

1
let my_num = i32::from_str("9").unwrap_or(0);


好吧,不。为什么要有?如果不再需要该字符串,则将其丢弃。

当您只需要读取一个字符串时,&strString更为有用,因为它只是原始数据的视图,而不是其所有者。您可以比String更容易传递它,并且它是可复制的,因此被调用的方法不会使用它。在这方面,它比较笼统:如果有String,则可以将其传递到期望&str的位置,但是如果有&str,则只能将其传递给期望String的函数。重新分配。

您可以在官方字符串指南中找到有关这两者之间的区别以及何时使用它们的更多信息。