网站首页 > java教程 正文
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-03-29 挑战刷leetcode第17天(分割回文串)
- 2025-03-29 value中存储过多的元素-Redis大key多key拆分方案
- 2025-03-29 LeetCode-131-分割回文串(分割段式回文串)
- 2025-03-29 Java程序员,一周Python入门:数据类型、变量、字符串和字符编码
- 2025-03-29 线上系统性能太差,我手写了字符串切割函数,性能提升10倍以上
- 2025-03-29 java中常用第三方类库(java第三方类库放在哪个目录)
- 2025-03-29 没想到字符串分割还能这样玩(字符串切割的方法)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)