thinkphp网站模板下载,手机排行榜2021前十名最新,网站开发书籍,ui设计较好的网站文章目录 字符串切片String迭代方法基础字符串方法容量操作增删改查 字符串切片
我们所熟知的由双引号括起来的字符串#xff0c;在Rust中只是个字符串切片#xff0c;又叫字符串字面值。这种类型一旦创建#xff0c;则不可更改。但支持索引#xff0c;从切片中索引出来的… 文章目录 字符串切片String迭代方法基础字符串方法容量操作增删改查 字符串切片
我们所熟知的由双引号括起来的字符串在Rust中只是个字符串切片又叫字符串字面值。这种类型一旦创建则不可更改。但支持索引从切片中索引出来的内容仍是切片其基本语法有二
st..ed 表示从第st个字符开始到第ed-1个字符为止st..ed 表示从第st个字符开始到第ed个字符为止
示例如下
fn main(){let s micro cold;let a s.to_string();println!({}, s[1..4]);println!({}, a[1..4]);
}输出为 icr icro String
String是Rust标准库实现的结构体其内容、长度均可更改Rust提供了如下三种创建字符串的方法其中两种基于字面量。
创建空字符串 let e String::new()创建长度为N的字符串 let c String::with_capacity()从字面量创建字符串 let s String::from(rust)调用字面量的内置方法 let t rust.to_string()
其中new, from, with_capacity为String结构体的关联函数to_string则是字面量的成员方法。
String类型并不支持索引但通过可以获取其对应的字面量从而支持字面量的切片操作。
此外非常诡异地Rust对加号进行了运算符重载但其左侧第一个值必须是字符串而其他值则必须为字面量。示例如下
fn main(){//let s micro cold; //报错let s micro cold;let a s.to_string();println!({}, a !); // 不报错//println!({}, a a); // 报错//println!({}, a a); // 报错但原因是所有权
}输出为
micro cold!迭代方法
String结构体中封装了许多迭代器包括
.chars() 遍历字符串的Unicode字符.bytes() 遍历字符串的字节序列.split© 根据c对字符串进行拆分并遍历.split_whitespace() 根据空格对字符串进行拆分并遍历
此外对于多行文本还有.lines可将字符串按行分割为迭代器每个元素都是一行文本。
fn main(){//let s micro cold; //报错let s micro cold.to_string();for c in s.chars(){println!({}, c);}for b in s.bytes(){println!({}, b);}println!(split by o);for o in s.split(o){println!({}, o);}println!(split_whitespace);for w in s.split_whitespace(){println!({}, w);}
}输出结果如下
m
i
c
r
oc
o
l
d
109
105
99
114
111
32
99
111
108
100
split by o
micrc
ld
split_whitespace
micro
cold除了上述迭代用法Rust字符串还提供了返回元组的拆分函数
split_at()将字符串分成两个部分在指定的位置进行分割。split_off()从字符串的指定位置分离出一个子字符串并返回新的 String 对象。
基础字符串方法
除了clone这种深拷贝必备方法外String还实现了诸多功能如下表所示
属性长度 len(), 字节数 capacity判定是否为空 is_empty()大小写转换转小写 to_lowercase()转大写 to_uppercase()类型转换转字节数组 as_bytes()转字节向量into_bytes()转可变切片 as_mut_str()转切片as_str()删除空格首空格trim_start()尾空格trim_end()首尾空格trim()关系包含关系contain(), 相等eq(),首尾判断以某字符串开头starts_with()以某字符串结尾ends_with()
这些方法的调用形式均为s.xxx()示例如下
fn main(){let mut s micro cold.to_string();println!(len:{}, s.len());println!(uppercase:{}, s.to_uppercase());
}结果如下
len:10
uppercase:MICRO COLD 容量操作
字符串为了实现内容可变必须要预留一定的空间为此Rust提供了一些函数
reserve()为字符串新增一些空间shrink_to_fit()将字符串的容量缩小到它所包含的内容所需的最小值。shrink_to()将字符串的容量缩小到指定下限。如果当前容量小于下限或者大于当前值则什么也不做。
fn main(){let mut s micro cold.to_string();println!(original capacity {}, s.capacity());s.reserve(10);println!(after reserve {}, s.capacity());s.shrink_to_fit();println!(fit capacity {}, s.capacity());s.shrink_to(25);println!(fit to 25 {}, s.capacity());
}效果如下
original capacity 10
after reserve 20
fit capacity 10
fit to 25 10增删改查
String是可变字符串故而提供了诸多增加、删除、改动的操作
类别方法弹出与追加追加字符push追加字符串push_str弹出最后一个字符pop删除清空clear截短truncate删除某位置remove匹配删除remove_matches插入插入字符insert插入字符串insert_str替换匹配替换replace位置替换replace_range;匹配从左查找find从右查找rfind均返回第一个匹配的位置
下面对上述方法进行测试
fn main(){let mut s micro cold.to_string();s.push(a);println!(push(a) - {}, s);s.push_str(bcd);println!(push_str(\bcd\) - {}, s);s.truncate(10);println!(truncate(3) - {}, s);s.remove(1);println!(remove(1) - {}, s);s.insert(1, i);println!(insert(1, i) - {}, s);s.insert_str(0, hello );println!(insert_str(0, \hello \) - {}, s);s.replace_range(0..5, Hola);println!(replace_range(0..5, \Hola\) - {}, s);println!(s.replace(\Hola\, \你好\) - {}, s.replace(Hola, 你好));
}测试结果如下
push(a) - micro colda
push_str(bcd) - micro coldabcd
truncate(3) - micro cold
remove(1) - mcro cold
insert(1, i) - micro cold
insert_str(0, hello ) - hello micro cold
replace_range(0..5, Hola) - Hola micro cold
s.replace(Hola, 你好) - 你好 micro cold