Rust字符串,让文本处理更简单
大家好!今天我们来聊聊Rust里面的字符串。字符串在编程中超级常见,不就是一堆字符嘛。但是在Rust里,字符串的处理方式有点特别,而且很有意思哦。
字符串字面量
首先,我们来聊聊字符串字面量。这玩意儿在编译时就已经知道值了,就像是硬编码到变量里的一样。字符串字面量是&str类型,它是Rust标准库的一部分。你可以想象它就像是字符串的一个小切片。
fn main() { let company: &str = "Science Note"; let location: &str = "China"; println!("company is : {} location :{}", company, location); }
输出就是company is : Science Note location :China。
字符串对象
接下来是字符串对象String。这个东东在标准库里面定义的,不像字符串字面量那样是核心语言的一部分。String是一个可变、可扩展的UTF-8编码的字符串。你可以用它来表示运行时提供的字符串值,它会被分配在堆上。
创建字符串对象
创建字符串对象有几种方法:
// 创建一个空字符串 let empty_string = String::new(); // 从字符串字面量创建一个字符串对象 let content_string = String::from("ScienceNote");
字符串对象的常用方法
Rust的String对象有很多好用的方法,比如:
- new():创建一个新的空字符串。
- to_string():把一个值转换成字符串。
- replace():替换字符串中的模式。
- as_str():提取一个包含整个字符串的字符串切片。
- push():在字符串末尾追加一个字符。
- push_str():在字符串末尾追加一个字符串切片。
- len():返回字符串的长度,以字节为单位。
- trim():去除字符串前后的空白字符。
- split_whitespace():通过空白字符分割字符串,并返回一个迭代器。
- split():通过指定的模式分割字符串,并返回一个迭代器。
字符串对象的示例
来看看这些方法是怎么用的:
// 使用new()方法创建一个空字符串对象,并设置值 fn main() { let mut z = String::new(); z.push_str("hello"); println!("{}", z); } // 使用to_string()方法将字符串字面量转换为字符串对象 fn main() { let name1 = "Hello ScienceNote , Hello!".to_string(); println!("{}", name1); } // 使用replace()方法替换字符串中的模式 fn main() { let name1 = "Hello ScienceNote , Hello!".to_string(); // 找到并替换所有的"Hello" let name2 = name1.replace("Hello", "Howdy"); println!("{}", name2); } // 使用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); } // 使用push()方法在字符串末尾追加字符 fn main() { let mut company = "Tutorial".to_string(); company.push('s'); println!("{}", company); } // 使用push_str()方法在字符串末尾追加字符串切片 fn main() { let mut company = "Science".to_string(); company.push_str(" Note"); println!("{}", company); } // 使用len()方法获取字符串的长度 fn main() { let fullname = " Science Note"; println!("length is {}", fullname.len()); } // 使用trim()方法去除字符串前后的空白字符 fn main() { let fullname = " Science Note \r\n"; println!("Before trim"); println!("length is {}", fullname.len()); println!(); println!("After trim"); println!("length is {}", fullname.trim().len()); } // 使用split_whitespace()方法通过空白字符分割字符串 fn main() { let msg = "Science Note has good t utorials".to_string(); let mut i = 1; for token in msg.split_whitespace() { println!("token {} {}", i, token); i += 1; } } // 使用split()方法通过指定的模式分割字符串 fn main() { let fullname = "Kannan,Sudhakaran,ScienceNote"; for token in fullname.split(",") { println!("token is {}", token); } // 存储分割结果到一个Vector中 let tokens: Vec = fullname.split(",").collect(); println!("firstName is {}", tokens[0]); println!("lastname is {}", tokens[1]); println!("company is {}", tokens[2]); } // 使用chars()方法访问字符串中的单个字符 fn main() { let n1 = "Science".to_string(); for n in n1.chars() { println!("{} ", n); } }
字符串拼接
在Rust中,你可以用+操作符来拼接两个字符串。这个过程叫做串联或者插值。串联的结果是一个全新的字符串对象。
fn main() { let n1 = "Science".to_string(); let n2 = "Note".to_string(); let n3 = n1 + &n2; // 传递n2的引用 println!("{} ", n3); }
输出就是ScienceNote。
类型转换
Rust还允许你把数字转换成字符串对象:
fn main() { let number = 2020; let number_as_string = number.to_string(); println!("{} ", number_as_string); println!("{} ", number_as_string == "2020"); }
格式化字符串
还有一个叫做format!的宏函数,可以用来把字符串对象拼接在一起:
fn main() { let n1 = "Science".to_string(); let n2 = "Note".to_string(); let n3 = format!("{} {}", n1, n2); println!("{} ", n3); }
输出就是Science Note。
好啦,这就是Rust中字符串的一些小知识。Rust的字符串处理既安全又灵活,而且默认的不可变性也有助于保证代码的健壮性。希望这个小介绍能让你对Rust中的字符串有个初步的了解。如果你对某个概念感兴趣,或者想要深入了解更多,记得告诉我哦!我们下次见!