字符串

收藏270

阅读11133

更新时间2025-08-27

Rust中的字符串数据类型可以分为以下几种 −

  • 字符串文字(&str)

  • 字符串对象(String)

字符串文字

当字符串的值在编译时已知时,使用字符串文字 (&str)。 字符串文字是一组字符,它们被硬编码到变量中。 例如,let company="Tutorials Point"。 字符串文字可在模块 std::str 中找到。 字符串文字也称为字符串切片。

以下示例声明两个字符串文字 − companylocation

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 new() pub const fn new() → String 创建一个新的空字符串。
2 to_string() fn to_string(&self) → String 将给定值转换为字符串。
3 replace() pub fn replace<'a, P>(&'a self, from: P, to: &str) → String 用另一个字符串替换模式的所有匹配项。
4 as_str() pub fn as_str(&self) → &str 提取包含整个字符串的字符串切片。
5 push() pub fn push(&mut self, ch: char) 将给定的字符附加到该字符串的末尾。
6 push_str() pub fn push_str(&mut self, string: &str) 将给定的字符串切片附加到该字符串的末尾。
7 len() pub fn len(&self) → usize 返回此字符串的长度(以字节为单位)。
8 trim() pub fn trim(&self) → &str 返回删除了前导和尾随空格的字符串切片。
9 split_whitespace() pub fn split_whitespace(&self) → SplitWhitespace 按空格分割字符串切片并返回迭代器。
10 split() pub fn split<'a, P>(&'a self, pat: P) → Split<'a, P> , where P is pattern can be &str, char, or a closure that determines the split. 返回此字符串切片的子字符串的迭代器,以模式匹配的字符分隔。
11 chars() pub fn chars(&self) → Chars 返回字符串切片的字符上的迭代器。

示例: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()

replace()函数有两个参数 − 第一个参数是要搜索的字符串模式,第二个参数是要替换的新值。 在上面的示例中,Helloname1 字符串中出现两次。

替换函数将所有出现的字符串 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()

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() string 方法返回字符串切片子字符串的迭代器,子字符串由模式匹配的字符分隔。 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 函数
add(self,&str)->String { 
   // 返回一个字符串对象
}

示例:字符串连接

fn main(){
   let n1 = "Tutorials".to_string();
   let n2 = "Point".to_string();

   let n3 = n1 + &n2; // n2 引用已传递
   println!("{}",n3);
}

输出如下所示

TutorialsPoint

示例:类型转换

以下示例说明将数字转换为字符串对象 −

fn main(){
   let number = 2020;
   let number_as_string = number.to_string(); 
   
   // 将数字转换为字符串
   println!("{}",number_as_string);
   println!("{}",number_as_string=="2020");
}

输出如下所示

2020
true

示例:Format! 宏

另一种添加到 String 对象的方法是使用名为 format 的宏函数。 使用 Format! 如下图所示。

fn main(){
   let n1 = "Tutorials".to_string();
   let n2 = "Point".to_string();
   let n3 = format!("{} {}",n1,n2);
   println!("{}",n3);
}

输出如下所示

Tutorials Point

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号