与字符串的转换

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习如何在 Rust 中进行字符串的转换。要将任何类型转换为字符串,我们可以为该类型实现 ToString 特性。或者,我们也可以实现 fmt::Display 特性,它会自动提供 ToString 特性,并允许我们使用 println! 打印该类型。另一方面,要将字符串解析为特定类型,比如数字,我们可以使用 parse 函数,并结合类型推断,或者使用“turbofish”语法指定类型。这依赖于 FromStr 特性,标准库中的许多类型都实现了该特性。如果我们想将字符串解析为用户定义的类型,可以为该类型实现 FromStr 特性。

注意:如果实验未指定文件名,你可以使用任何你想要的文件名。例如,你可以使用 main.rs,并通过 rustc main.rs &&./main 进行编译和运行。

与字符串的转换

转换为字符串

将任何类型转换为 String 很简单,只需为该类型实现 ToString 特性。不过,你不应直接这样做,而应实现 fmt::Display 特性,它会自动提供 ToString,并且还允许像在 print! 部分讨论的那样打印该类型。

use std::fmt;

struct Circle {
    radius: i32
}

impl fmt::Display for Circle {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Circle of radius {}", self.radius)
    }
}

fn main() {
    let circle = Circle { radius: 6 };
    println!("{}", circle.to_string());
}

解析字符串

将字符串转换为数字是比较常见的类型转换之一。惯用的方法是使用 parse 函数,并安排类型推断或使用“turbofish”语法指定要解析的类型。以下示例展示了这两种方法。

只要为该类型实现了 FromStr 特性,这将把字符串转换为指定的类型。标准库中的许多类型都实现了该特性。要在用户定义的类型上获得此功能,只需为该类型实现 FromStr 特性。

fn main() {
    let parsed: i32 = "5".parse().unwrap();
    let turbo_parsed = "10".parse::<i32>().unwrap();

    let sum = parsed + turbo_parsed;
    println!("Sum: {:?}", sum);
}

总结

恭喜你!你已经完成了“与字符串的转换”实验。你可以在 LabEx 中练习更多实验来提升你的技能。