callablestatement.setstring会不会将字符串trim_Rust 学习笔记-6 有趣的字符串

Rust 学习笔记, Rust 教程

往期回顾:

Rust学习笔记-1 Rust 介绍.

Rust 学习笔记-2 环境安装

Rust学习笔记-2.1 rustup 镜像加速,飞起

Rust 学习笔记-3 Hello World

Rust学习笔记-4 Rust 基础数据类型

Rust 学习笔记-5 变量与常量

dc7a16e41ea2aed9c40797ff594b0ce5.png

rust 学习笔记6-字符串

Rust 中的String类型可以分为2类.

  1. 字符串文本(&str)
  2. 字符串对象(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 `targetdebughello-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

92f99a64dc0e282c8dd4f85ca0654a7f.png

字符串常用方法

b0291301be7ea047dd01d03211b3bffa.png

new()

例如:

fn demo22() {    let mut z = String::new();    z.push_str("hello");    println!("{}", z);}

cargo run:

7c67651f90bbd53acee0d1084940dca7.png

rust 学习笔记-6 demo22

to_string()

栗子:

fn demo23() {    let name1 = "Hello World Hello!".to_string();    println!("{}", name1);}fn main() {    demo23();}

cargo run:

d4b713531048eb4cff25ba698b439c7e.png

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:

b0fb5b859d2ef337f66d6b7902b0473c.png

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:

0c1cecaa7ab83bf6a3ef84408aac3c0a.png

rust 学习笔记-6 demo25

push()

将给定的字符追加到字符串的末尾

栗子:

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

cargo run:

dede607a8d45f7fac9aa6b4bd4ed88b9.png

len()

len()返回字符总数包括空格.

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

cargo run:

a3b6c629627e20e430ea6a7a6bbbaa20.png

trim()

去掉字符串前后的空格. 不会去掉中间的空格.

fn demo28() {    let fullname = " Rust is       Good! ";    println!("Before trim ");    println!("length is {}", fullname.len());    println!();    println!("After trim ");    println!("length is {}", fullname.trim().len());}fn main() {    demo28();}

cargo run:

140dd7ba71503def3ac21de982c110a0.png

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

ee71833ab71011878ce5530effc00e82.png

split()

string()返回模式匹配的字符分割的字符串迭代器。 split()方法的局限性是无法存储结果以供以后使用。collect方法可用于将split()返回的结果存储vector.

fn demo30() {    let fullname = "张全蛋,李子柒,王二";    for token in fullname.split(",") {        println!("token is {}", token);    }    println!("");    let tokens: Vec = fullname.split(",").collect();    println!("第一  {}", tokens[0]);    println!("第二  {}", tokens[1]);    println!("第三  {}", tokens[2]);}fn main() {    demo30();}

cargo run:

5a0fa76c6b09c31e64afb7b6232357f9.png

用 "+" 运算符 连接字符串

字符串可以通过+ 连接起来. 其实就是把后一个加到前一个里面去.

fn demo31() {    let n1 = "Hello ".to_string();    let n2 = "Rust".to_string();    let n3 = n1 + &n2; // n2 是引用.    println!("{}", n3);}fn main() {    demo31();}

cargo run:

c4ce1997ea9aa5e1c7693c407f4382a7.png

类型转换

比如将整数转成字符串.

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:

b36c0202e78904ced43d2dc79155ad41.png

字符串连接的另一个方法 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:

94c27466a7073e4ed44e5c2888507af3.png

标准库字符串内置了很多方法. 可参考:

https://doc.rust-lang.org/std/string/struct.String.html

今天太晚了,就到这里!欢迎大家一起交流!

5fb248cf185b94abbabad9251ec2fe69.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值