rust学习-1.3-字符串类型String和&str,转义字符

在Rust中,String&str(字符串切片)是两种不同的字符串类型,它们在内存中的表示和用途有所不同。

String

  • String是Rust标准库提供的可增长、可变的UTF-8编码字符串。
  • 它在堆上分配内存,可以动态地增长或缩小。
  • String拥有其数据的所有权,因此可以修改其内容。
    示例:
let mut s = String::from("hello");
s.push_str(", world!"); // 添加字符串
println!("{}", s); // 输出 "hello, world!"

&str

  • &str是字符串切片,它是对字符串一部分的引用。
  • 它可以是任何UTF-8编码字符串的视图,包括String对象和字符串字面量。
  • &str是不可变的,因为它只是引用,不拥有数据。
    示例:
let s = "hello, world!";
println!("{}", &s[0..5]); // 输出 "hello"

String&str的相互转换

  • String创建&str:由于String是UTF-8编码的,你可以通过引用来获取&str
    let s = String::from("hello");
    let slice: &str = &s; // `slice`是`&str`类型,引用了`s`
    
  • &str创建String:可以使用to_string方法或者String::from函数。
    let slice = "hello";
    let s: String = slice.to_string(); // 或 `String::from(slice)`
    

理解String&str的区别对于编写高效的Rust代码非常重要,因为它们在性能和内存使用上有所不同。选择合适的类型可以帮助你避免不必要的内存分配和拷贝。

转义字符

在Rust中,转义字符是一系列特殊的字符,它们在字符串或字符字面量中使用,用于表示那些不能直接表示或容易引起混淆的字符。转义字符以反斜杠 \ 开头,后面跟着一个字符来表示特定的意思。
下面是一些Rust中的转义字符示例:

  • \\ - 表示反斜杠字符 \
  • \' - 表示单引号字符 '
  • \" - 表示双引号字符 "
  • \n - 表示换行符(LF,Line Feed)。
  • \r - 表示回车符(CR,Carriage Return)。
  • \t - 表示水平制表符(HT,Horizontal Tab)。
  • \u{} - 表示一个Unicode字符,其中 {} 内是一个十六进制数。
    例如:
let quote = "他说:\"你好,世界!\"";
let newline = "这是第一行\n这是第二行";
let backslash = "这是一个反斜杠:\\";
let unicode = "这是一个笑脸:\u{1F60A}";

在上述例子中:

  • quote 变量包含了一个双引号字符 ", 它被转义为 \"
  • newline 变量包含了一个换行符 \n,它将在输出时导致文本换行。
  • backslash 变量包含了一个反斜杠 \,它被转义为 \\
  • unicode 变量包含了一个Unicode字符,它被表示为 \u{1F60A},这是一个笑脸表情。
    在Rust中,转义字符的使用是必要的,因为某些字符在字符串字面量中有特殊的含义或无法直接输入。正确地使用转义字符可以确保字符串的准确性和可读性。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容