在Rust中将String转换为int?

时间:2014-11-20 15:27:09

标签: rust

注意:此问题包含已弃用的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());

有没有办法直接将String转换为int

6 个答案:

答案 0 :(得分:154)

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

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。如果无法将字符串解析为指定的类型(例如,字符串Err无法解析为"peter"),则此结果将为i32

答案 1 :(得分:6)

最近一夜,你可以这样做:

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

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

答案 2 :(得分:0)

嗯,不。为什么会这样?如果您不再需要它,请丢弃该字符串。

当您只需要读取字符串时,

&strString更有用,因为它只是原始数据的一个视图,而不是它的所有者。您可以比String更轻松地传递它,并且它是可复制的,因此调用的方法不会使用它。在这方面,它更为通用:如果您有String,则可以将其传递到预期&str的位置,但如果您有&str,则只能将其传递给函数如果您进行新的分配,则期待String

您可以在official strings guide中找到有关这两者之间差异以及何时使用它们的更多信息。

答案 3 :(得分:0)

您可以使用import keras print(keras.__version__) 特性的FromStr方法,该方法是为from_str实现的:

i32

答案 4 :(得分:0)

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

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

答案 5 :(得分:-1)

因此,基本上,您想将String转换为Integer权利! 这是我最常使用的,官方文档中也提到了这点。

fn main() {

    let char = "23";
    let char : i32 = char.trim().parse().unwrap();
    println!("{}", char + 1);

}

这对String和&str都适用 希望这也会有所帮助。