无涯教程-Rust - 字符串

时间:2024-01-25 14:04:10

Rust中的String数据类型可以分为以下几种-

  • String Literal(&str)

  • String Object(String)

当在编译时知道字符串的值时,将使用字符串(&str),字符串是一组字符,这些字符被硬编码为变量。例如,让company ="LearnFK Point",字符串可在模块std::str中找到。

以下示例声明了两个字符串 - company 和 location 。

fn main() {
   let company:&str="LearnFKPoint";
   let location:&str="Guanxi";
   println!("company is : {} location :{}",company,location);
}

默认情况下,字符串是静态的,这意味着可以保证字符串在整个程序期间均有效,我们还可以将变量明确指定为静态,如下所示-

fn main() {
   let company:&'static str="LearnFKPoint";
   let location:&'static str="Guanxi";
   println!("company is : {} location :{}",company,location);
}

上面的程序将生成以下输出-

Guanxi

String对象

标准库中提供了String对象类型,与字符串不同,字符串对象类型不是核心语言的一部分,在标准库 pub struct String 中将其定义为公共结构,字符串是可增长的集合,它是可变的且采用UTF-8编码的类型,字符串对象在堆中分配。

要创建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("LearnFKPoint");
   println!("length is {}",content_string.len());
}

上面的示例创建两个字符串 - 使用 new 方法创建一个空字符串对象 ,并使用 from 方法创建一个字符串文本对象 。

输出如下所示-

length is 0
length is 14

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 LearnFKPoint , 
   Hello!".to_string();
   println!("{}",name1);
}

上面的程序生成以下输出-

Hello LearnFKPoint , Hello! 

replace() 函数

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

replace函数将所有出现的字符串 Hello 替换为 Howdy 。

fn main(){
   let name1="Hello LearnFKPoint , 
   Hello!".to_string();         //字符串对象
   let name2=name1.replace("Hello","Howdy");    //替换函数
   println!("{}",name2);
}

上面的程序生成以下输出-

Howdy LearnFKPoint , 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()函数将给定的char附加到此String的末尾。

fn main(){
   let mut company="Learnfk".to_string();
   company.push('s');
   println!("{}",company);
}

上面的程序生成以下输出-

Learnfks

push_str() 函数

push_str()函数将给定的字符串切片附加到String的末尾。

fn main(){
   let mut company="LearnFK".to_string();
   company.push_str(" Point");
   println!("{}",company);
}

上面的程序生成以下输出-

LearnFK Point

len() 函数

len()函数返回字符串中的字符总数(包括空格)。

fn main() {
   let fullname=" LearnFK Point";
   println!("length is {}",fullname.len());
}

上面的程序生成以下输出-

length is 13

trim() 函数

trim()函数删除字符串中的前导和尾随空格,注意此函数不会删除内联空格。

fn main() {
   let fullname=" LearnFK 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="LearnFK Point has good Learnfk".to_string();
   let mut i=1;
   
   for token in msg.split_whitespace(){
      println!("token {} {}",i,token);
      i+=1;
   }
}

上面的程序生成以下输出-

token 1 LearnFK
token 2 Point
token 3 has
token 4 good
token 5 Learnfk

split() 函数

split() 将字符串转换成一个数组,collect 方法可用于将split()返回的输出存储为向量。

fn main() {
   let fullname="Kannan,Sudhakaran,Learnfk";

   for token in fullname.split(","){
      println!("token is {}",token);
   }

   //存储在向量中
   println!("\n");
   let tokens:Vec<&str>= fullname.split(",").collect();
   println!("firstName is {}",tokens[0]);
   println!("lastname is {}",tokens[1]);
   println!("company is {}",tokens[2]);
}

上面的示例在遇到逗号(,)时将其拆分为字符串 全名 。

token is Kannan
token is Sudhakaran
token is Learnfk

firstName is Kannan
lastname is Sudhakaran
company is Learnfk

chars() 函数

可以使用chars方法访问字符串中的各个字符,让我们考虑一个示例来理解这一点。

fn main(){
   let n1="LearnFK".to_string();

   for n in n1.chars(){
      println!("{}",n);
   }
}

上面的程序生成以下输出-

L
e
a
r
n
F
K

连接字符串

字符串值可以附加到另一个字符串,这称为串联或插值, +运算符在内部使用 add 方法, add函数的语法带有两个参数,第一个参数是 self –字符串对象本身,第二个参数是第二个字符串对象的引用。这如下所示-

//add 函数
add(self,&str)->String { 
   //返回一个字符串
}

字符串连接示例

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

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

上面的程序生成以下输出-

LearnFKPoint

类型转换示例

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

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的宏函数,使用格式!如下图所示。

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

上面的程序生成以下输出-

LearnFK Point

参考链接

https://www.learnfk.com/rust/rust-string.html