- Rust 教程
- 铁锈 - 主页
- Rust - 简介
- Rust - 环境设置
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- 铁锈 - 恒定
- Rust - 字符串
- Rust - 运算符
- Rust - 决策
- 铁锈 - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- 铁锈 - 切片
- Rust - 结构
- Rust - 枚举
- Rust - 模块
- Rust - 收藏
- Rust - 错误处理
- Rust - 泛型类型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用的资源
- Rust - 快速指南
- Rust - 有用的资源
- Rust - 讨论
Rust - 字符串
Rust 中的字符串数据类型可以分为以下几类:
字符串文字(&str)
字符串对象(字符串)
字符串字面量
当编译时已知字符串的值时,使用字符串文字 (&str)。字符串文字是一组字符,它们被硬编码到变量中。例如,让 company="Tutorials Point"。字符串文字可在模块 std::str 中找到。字符串文字也称为字符串切片。
以下示例声明两个字符串文字 - company和location。
fn main() { let company:&str="TutorialsPoint"; let location:&str = "Hyderabad"; println!("company is : {} location :{}",company,location); }
默认情况下,字符串文字是静态的。这意味着字符串文字保证在整个程序的持续时间内有效。我们还可以显式地将变量指定为静态,如下所示 -
fn main() { let company:&'static str = "TutorialsPoint"; let location:&'static str = "Hyderabad"; println!("company is : {} location :{}",company,location); }
上述程序将生成以下输出 -
company is : TutorialsPoint location :Hyderabad
字符串对象
标准库中提供了 String 对象类型。与字符串文字不同,字符串对象类型不是核心语言的一部分。它在标准库pub struct String中被定义为公共结构。String 是一个可增长的集合。它是可变的 UTF-8 编码类型。String对象类型可用于表示运行时提供的字符串值。String对象是在堆中分配的。
句法
要创建 String 对象,我们可以使用以下任何语法 -
String::new()
上面的语法创建一个空字符串
String::from()
这将创建一个字符串,其中一些默认值作为参数传递给from()方法。
以下示例说明了 String 对象的使用。
fn main(){ let empty_string = String::new(); println!("length is {}",empty_string.len()); let content_string = String::from("TutorialsPoint"); println!("length is {}",content_string.len()); }
上面的示例创建了两个字符串 - 使用new方法创建一个空字符串对象,使用from方法创建一个来自字符串文字的字符串对象。
输出如下所示 -
length is 0 length is 14
常用方法-字符串对象
先生。 | 方法 | 签名 | 描述 |
---|---|---|---|
1 | 新的() | pub const fn new() → 字符串 | 创建一个新的空字符串。 |
2 | to_string() | fn to_string(&self) → 字符串 | 将给定值转换为字符串。 |
3 | 代替() | pub fn Replace<'a, P>(&'a self, from: P, to: &str) → 字符串 | 将模式的所有匹配项替换为另一个字符串。 |
4 | as_str() | pub fn as_str(&self) → &str | 提取包含整个字符串的字符串切片。 |
5 | 推() | pub fn Push(&mut self, ch: char) | 将给定的字符附加到该字符串的末尾。 |
6 | Push_str() | pub fn Push_str(&mut self, 字符串: &str) | 将给定的字符串切片附加到该字符串的末尾。 |
7 | 长度() | pub fn len(&self) → usize | 返回此字符串的长度(以字节为单位)。 |
8 | 修剪() | pub fn 修剪(&self) → &str | 返回删除了前导和尾随空格的字符串切片。 |
9 | split_whitespace() | pub fn split_whitespace(&self) → SplitWhitespace | 按空格分割字符串切片并返回迭代器。 |
10 | 分裂() | pub fn split<'a, P>(&'a self, pat: P) → Split<'a, P> ,其中 P 是模式,可以是 &str、char 或确定拆分的闭包。 | 返回对此字符串切片的子字符串的迭代器,子字符串由模式匹配的字符分隔。 |
11 | 字符() | pub fn chars(&self) → 字符 | 返回字符串切片的字符上的迭代器。 |
插图:new()
使用new()方法创建一个空字符串对象,并将其值设置为hello。
fn main(){ let mut z = String::new(); z.push_str("hello"); println!("{}",z); }
输出
上述程序生成以下输出 -
hello
插图:to_string()
要访问 String 对象的所有方法,请使用to_string()函数将字符串文字转换为对象类型。
fn main(){ let name1 = "Hello TutorialsPoint , Hello!".to_string(); println!("{}",name1); }
输出
上述程序生成以下输出 -
Hello TutorialsPoint , Hello!
说明:替换()
Replace ()函数有两个参数 - 第一个参数是要搜索的字符串模式,第二个参数是要替换的新值。在上面的示例中,Hello在name1字符串中出现了两次。
替换函数将所有出现的字符串Hello替换为Howdy。
fn main(){ let name1 = "Hello TutorialsPoint , Hello!".to_string(); //String object let name2 = name1.replace("Hello","Howdy"); //find and replace println!("{}",name2); }
输出
上述程序生成以下输出 -
Howdy TutorialsPoint , Howdy!
插图:as_str()
as_str ()函数提取包含整个字符串的字符串切片。
fn main() { let example_string = String::from("example_string"); print_literal(example_string.as_str()); } fn print_literal(data:&str ){ println!("displaying string literal {}",data); }
输出
上述程序生成以下输出 -
displaying string literal example_string
说明:push()
Push ()函数将给定的字符附加到该字符串的末尾。
fn main(){ let mut company = "Tutorial".to_string(); company.push('s'); println!("{}",company); }
输出
上述程序生成以下输出 -
Tutorials
说明:push_str()
Push_str ()函数将给定的字符串切片附加到字符串的末尾。
fn main(){ let mut company = "Tutorials".to_string(); company.push_str(" Point"); println!("{}",company); }
输出
上述程序生成以下输出 -
Tutorials Point
插图:len()
len ()函数返回字符串中的字符总数(包括空格)。
fn main() { let fullname = " Tutorials Point"; println!("length is {}",fullname.len()); }
输出
上述程序生成以下输出 -
length is 20
插图:修剪()
Trim() 函数删除字符串中的前导空格和尾随空格。请注意,此函数不会删除内联空格。
fn main() { let fullname = " Tutorials Point \r\n"; println!("Before trim "); println!("length is {}",fullname.len()); println!(); println!("After trim "); println!("length is {}",fullname.trim().len()); }
输出
上述程序生成以下输出 -
Before trim length is 24 After trim length is 15
插图:split_whitespace()
split_whitespace ()将输入字符串拆分为不同的字符串。它返回一个迭代器,因此我们迭代令牌,如下所示 -
fn main(){ let msg = "Tutorials Point has good t utorials".to_string(); let mut i = 1; for token in msg.split_whitespace(){ println!("token {} {}",i,token); i+=1; } }
输出
token 1 Tutorials token 2 Point token 3 has token 4 good token 5 tutorials
插图:split()字符串
split () 字符串方法返回字符串切片子字符串的迭代器,子字符串由模式匹配的字符分隔。split()方法的限制是不能存储结果以供以后使用。collect方法可用于将 split() 返回的结果存储为向量。
fn main() { let fullname = "Kannan,Sudhakaran,Tutorialspoint"; for token in fullname.split(","){ println!("token is {}",token); } //store in a Vector println!("\n"); let tokens:Vec<&str>= fullname.split(",").collect(); println!("firstName is {}",tokens[0]); println!("lastname is {}",tokens[1]); println!("company is {}",tokens[2]); }
上面的示例在遇到逗号(,)时分割字符串fullname。
输出
token is Kannan token is Sudhakaran token is Tutorialspoint firstName is Kannan lastname is Sudhakaran company is Tutorialspoint
插图:chars()
可以使用 chars 方法访问字符串中的各个字符。让我们考虑一个例子来理解这一点。
fn main(){ let n1 = "Tutorials".to_string(); for n in n1.chars(){ println!("{}",n); } }
输出
T u t o r i a l s
使用 + 运算符连接字符串
一个字符串值可以附加到另一个字符串上。这称为串联或插值。字符串连接的结果是一个新的字符串对象。+ 运算符内部使用add方法。add 函数的语法有两个参数。第一个参数是self - 字符串对象本身,第二个参数是第二个字符串对象的引用。如下所示 -
//add function add(self,&str)->String { // returns a String object }
插图:字符串连接
fn main(){ let n1 = "Tutorials".to_string(); let n2 = "Point".to_string(); let n3 = n1 + &n2; // n2 reference is passed println!("{}",n3); }
输出如下所示
TutorialsPoint
插图:类型转换
以下示例说明将数字转换为字符串对象 -
fn main(){ let number = 2020; let number_as_string = number.to_string(); // convert number to string println!("{}",number_as_string); println!("{}",number_as_string=="2020"); }
输出如下所示
2020 true
插图:格式!宏
将 String 对象添加到一起的另一种方法是使用称为 format 的宏函数。使用格式!如下图所示。
fn main(){ let n1 = "Tutorials".to_string(); let n2 = "Point".to_string(); let n3 = format!("{} {}",n1,n2); println!("{}",n3); }
输出如下所示
Tutorials Point