网站首页 > 精选教程 正文
Rust 学习笔记, Rust 教程
往期回顾:
Rust 中的String类型可以分为2类.
- 字符串文本(&str)
- 字符串对象(String)
字符串文本
当字符串的值在编译时已知时,使用字符串文本(&str)。这些字符被编码成一个硬字符集。例如,让company=“my company”。字符串文本位于模块std::str中。字符串文本也称为字符串切片.
这实际上跟c语言里面的字符数组一个概念.
例子:
fn demo19() {
let company: &str = "my company";
let location: &str = "guangdong";
println!("company is : {} location :{}", company, location);
}
fn main() {
demo19();
}
默认情况下,字符串文字是静态的。这意味着字符串文本在整个程序期间都是有效的.
fn demo20() {
let company: &'static str = "my company";
let location: &'static str = "guangdong";
println!("company is : {} location :{}", company, location);
}
fn main() {
demo20();
}
上面2段程序输出的结果是一样的.
Finished dev [unoptimized + debuginfo] target(s) in 0.48s
Running `target\debug\hello-world.exe`
company is : my company location :guangdong
字符串对象(String Object).
标准库中提供了字符串对象类型。与字符串文本(string literal)不同,string对象类型不是核心语言的一部分。它被定义为标准库pub struct String中的公共结构。字符串是一个可增长的集合。它是可变的UTF-8编码类型。字符串对象类型可用于表示在运行时提供的字符串值。字符串对象在堆中分配。实际上是一个vector.
语法:
创建一个字符串对象.
String::new()
创建一个空白字符串对象.
String::from()
是不是感觉有点java的味道.
fn demo21() {
let empty_string = String::new();
println!("length is {}", empty_string.len());
let content_string = String::from("my string");
println!("length is {}", content_string.len());
}
fn main() {
demo21();
}
第一个empty_string 创建了一个空白的字符串对象. 第二个从字符串文本创建一个字符串对象.
cargo run
字符串常用方法
new()
例如:
fn demo22() {
let mut z = String::new();
z.push_str("hello");
println!("{}", z);
}
cargo run:
to_string()
栗子:
fn demo23() {
let name1 = "Hello World Hello!".to_string();
println!("{}", name1);
}
fn main() {
demo23();
}
cargo run:
replace()
replace()函数接受两个参数,
第一个参数是要搜索的字符串模式,
第二个参数是要替换的新值。
看下面的的示例中,Hello在name1字符串中出现两次
fn demo24() {
let name1 = "Hello Rust, Hello!".to_string(); //字符串对象
let name2 = name1.replace("Hello", "Hi"); //查找并替换.
println!("{}", name2);
}
fn main() {
demo24();
}
cargo run:
as_str()
提取包含整个字符串的字符串切片,直接将String对象转换成了字符数组了.
fn demo25() {
let example_string = String::from("示例字符串,哈哈");
print_literal(example_string.as_str());
}
fn print_literal(data: &str) {
println!("displaying string literal {}", data);
}
fn main() {
demo25();
}
cargo run:
push()
将给定的字符追加到字符串的末尾
栗子:
fn demo26() {
let mut company = "Tutorial".to_string();
company.push('s');
println!("{}", company);
}
fn main() {
demo26();
}
cargo run:
len()
len()返回字符总数包括空格.
fn demo27() {
let fullname = " Tutorials";
println!("length is {}", fullname.len());
}
fn main() {
demo27();
}
cargo run:
trim()
去掉字符串前后的空格. 不会去掉中间的空格.
fn demo28() {
let fullname = " Rust is Good! \r\n";
println!("Before trim ");
println!("length is {}", fullname.len());
println!();
println!("After trim ");
println!("length is {}", fullname.trim().len());
}
fn main() {
demo28();
}
cargo run:
split_whitespace()
split_whitespace() 输入字符串拆分为不同的字符串。它返回一个迭代器. 所以只要循环这个迭代器每个元素. 如下例:
fn demo29() {
let msg = "Rust is a good programing language".to_string();
let mut i = 1;
for token in msg.split_whitespace() {
println!("token {} {}", i, token);
i += 1;
}
}
fn main() {
demo29();
}
cargo run
split()
string()返回模式匹配的字符分割的字符串迭代器。 split()方法的局限性是无法存储结果以供以后使用。collect方法可用于将split()返回的结果存储vector.
fn demo30() {
let fullname = "张全蛋,李子柒,王二";
for token in fullname.split(",") {
println!("token is {}", token);
}
println!("\n");
let tokens: Vec<&str> = fullname.split(",").collect();
println!("第一 {}", tokens[0]);
println!("第二 {}", tokens[1]);
println!("第三 {}", tokens[2]);
}
fn main() {
demo30();
}
cargo run:
用 "+" 运算符 连接字符串
字符串可以通过+ 连接起来. 其实就是把后一个加到前一个里面去.
fn demo31() {
let n1 = "Hello ".to_string();
let n2 = "Rust".to_string();
let n3 = n1 + &n2; // n2 是引用.
println!("{}", n3);
}
fn main() {
demo31();
}
cargo run:
类型转换
比如将整数转成字符串.
fn demo32() {
let number = 2020;
let number_as_string = number.to_string();
// 转换数字到字符串.
println!("{}", number_as_string);
println!("{}", number_as_string == "2020");
}
fn main() {
demo32();
}
cargo run:
字符串连接的另一个方法 format! 宏.
使用format!宏也可以实现连接2个字符串.
用法如下:
fn demo33() {
let n1 = "Hello ".to_string();
let n2 = "Rust ".to_string();
let n3 = format!("{} {}", n1, n2);
println!("{}", n3);
}
fn main() {
demo33();
}
cargo run:
标准库字符串内置了很多方法. 可参考:
https://doc.rust-lang.org/std/string/struct.String.html
今天太晚了,就到这里!欢迎大家一起交流!
猜你喜欢
- 2025-01-24 Java19 正式 GA!虚拟线程如何大幅提高系统吞吐量
- 2025-01-24 UTF-8编码中的特殊空格之C2 A0 -> NO-BREAK SPACE
- 2025-01-24 第3天|Java入门有野,基础语法(java经典入门指南)
- 2025-01-24 # 一文看懂:常用Java库的使用场景与技巧
- 2025-01-24 我,阿里P7,找不到工作(阿里简历不过)
- 2025-01-24 Java——String类全面解析(java string类常用方法)
- 2025-01-24 vim技巧:设置空格和Tab字符可见,并自定义显示的字符颜色
- 2025-01-24 工作5年总结9种方式,帮你减少Java程序中80%的空指针异常
- 2025-01-24 你只会用 SB?试试 StringJoiner,真香
- 2025-01-24 Java中的空指针怎么处理?(java空指针异常处理)
你 发表评论:
欢迎- 07-10动漫人物像|插画 壁纸 头像 签名 素材
- 07-10运动人物|插画 壁纸 头像 签名 素材
- 07-10动漫人物|插画 壁纸 头像 签名 素材
- 07-10神话人物|插画 壁纸 头像 签名 素材
- 07-10日漫人物像|插画 壁纸 头像 签名 素材
- 07-10 日漫人物|插画 壁纸 头像 签名 素材
- 07-10日漫人物风|插画 壁纸 头像 签名 素材
- 07-10日漫人物|插画 壁纸 头像 签名 素材
- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)