最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rust中字符串與格式化操作方法

 更新時間:2025年10月20日 17:24:43   作者:alwaysrun  
Rust提供了多種字符串類型和強大的格式化工具,主要有兩種字符串類型:&str(字符串切片)和String(動態(tài)字符串),二者均基于UTF-8 編碼,本文重點介紹Rust中字符串與格式化的相關(guān)知識,感興趣的朋友一起看看吧

Rust 提供了多種字符串類型和強大的格式化工具。

字符串

Rust 中主要有兩種字符串類型:&str(字符串切片)和String(動態(tài)字符串),二者均基于UTF-8 編碼

String-動態(tài)字符串

String是標(biāo)準(zhǔn)庫提供的擁有所有權(quán)的動態(tài)字符串類型,存儲在堆上:

  • 可變:可通過方法修改內(nèi)容(如添加、刪除字符)。
  • 動態(tài)分配:內(nèi)存會根據(jù)內(nèi)容自動擴容。
  • 所有權(quán):String擁有其數(shù)據(jù),賦值或傳遞時會觸發(fā)所有權(quán)轉(zhuǎn)移。

創(chuàng)建:

let mut s = String::new();                   // 空字符串
let s = "initial".to_string();               // 從字面量轉(zhuǎn)換
let s = String::from("initial");             // 同上
let s = format!("Hello {}", "world");        // 通過格式化宏創(chuàng)建

&str-字符串切片

&str是對一段 UTF-8 編碼字符串的不可變引用,它不擁有數(shù)據(jù)所有權(quán),僅作為 “視圖” 存在:

  • 不可變:無法直接修改&str指向的內(nèi)容。
  • 輕量:由兩部分組成(指針 + 長度),不分配堆內(nèi)存,傳遞時無需復(fù)制數(shù)據(jù)。
  • 字面量默認類型:代碼中的字符串字面量(如"hello")本質(zhì)上是&'static str,生命周期為整個程序運行期。
let s: &str = "hello world";  // 字符串字面量,類型為&'static str
let slice: &str = &s[0..5];   // 從s中截取切片,結(jié)果為"hello"

&str與String間轉(zhuǎn)換

  • String&str:通過as_str()方法或直接引用(&s),因為String實現(xiàn)了Deref<Target=str>,會自動解引用為&str。
let s = String::from("test");
let s_slice: &str = s.as_str();  // 顯式轉(zhuǎn)換
let s_slice2: &str = &s;         // 自動解引用,更常用
  • &strString:通過String::fromto_string()。
let slice = "hello";
let s = String::from(slice);  // 轉(zhuǎn)換為String
let s2 = slice.to_string();   // 等價方式

常用操作

分類方法 / 操作適用類型說明
創(chuàng)建String::new()String創(chuàng)建空字符串
String::from("abc")String從字面量創(chuàng)建
"abc".to_string()String&str
創(chuàng)建 String
String::with_capacity(n)String預(yù)分配容量,減少重分配
轉(zhuǎn)換s.as_str()String轉(zhuǎn)換為 &str
s.into_bytes()String轉(zhuǎn)換為 Vec<u8>
String::from_utf8(v)Vec<u8>從字節(jié)向量還原字符串
s.to_string()&str創(chuàng)建新 String
長度s.len()String
/&str
返回字節(jié)長度(不是字符數(shù))
s.chars().count()String
/&str
返回字符數(shù)(Unicode scalar)
判斷s.is_empty()String
/&str
是否為空字符串
s.contains("ab")String
/&str
是否包含子串
s.starts_with("ab")String
/&str
是否以指定子串開頭
s.ends_with("ab")String
/&str
是否以指定子串結(jié)尾
拼接s.push('a')String追加單個字符
s.push_str("abc")String追加字符串切片
s1 + &s2String
+ &str
拼接(移動左側(cè))
format!("{}{}", a, b)任意格式化拼接,不移動
截取/分割&s[a..b]&str按字節(jié)切片(需在字符邊界)
s.split(',')String
/&str
按分隔符分割為迭代器
s.split_whitespace()String
/&str
按空白分割
s.lines()String
/&str
按行分割
修剪s.trim()String
/&str
去除首尾空白
s.trim_start() /
trim_end()
String
/&str
去除首或尾空白
替換s.replace("a","b")String
/&str
全部替換
s.replacen("a","b",n)String
/&str
替換前 n 次
大小寫s.to_lowercase()String
/&str
轉(zhuǎn)小寫
s.to_uppercase()String
/&str
轉(zhuǎn)大寫
查找s.find("ab")String
/&str
返回首個匹配位置(Option)
s.rfind("ab")String
/&str
從后往前找
迭代s.chars()String
/&str
按字符迭代
s.bytes()String
/&str
按字節(jié)迭代
比較s1 == s2String
/&str
內(nèi)容比較(UTF-8 安全)
拷貝 / 克隆s.clone()String深拷貝(堆上內(nèi)容復(fù)制)
清空 / 容量s.clear()String清空內(nèi)容
s.capacity()String當(dāng)前容量
s.reserve(n)String預(yù)留額外容量
字節(jié)訪問s.as_bytes()String
/&str
獲取字節(jié)切片
連接 Vecvec.join(",")Vec<&str>用分隔符連接
格式化輸出format!()任意返回格式化字符串

格式化

Rust 提供了一套強大的格式化宏,用于字符串拼接、輸出等場景,核心是format!(返回String),以及衍生的print!(打印到標(biāo)準(zhǔn)輸出)、println!(帶換行的打印)、eprint!(打印到標(biāo)準(zhǔn)錯誤)等。

格式化語法說明

{[argument][:[fill][align][width][.precision][type]]}

// 動態(tài)寬度+精度(后面需要$)
println!("{value:>width$.prec$}", 
         value=3.14159, 
         width=10, 
         prec=3); // "     3.142"
// 帶前綴的十六進制
println!("{:#08x}", 42); // "0x00002a"
// 命名參數(shù)+格式化
println!("{name:*^10}", name="ALICE"); // "**ALICE***"

參數(shù)指定

{argument}用于指定要格式化的參數(shù),默認省略(按順序)

形式說明示例輸出結(jié)果
省略按參數(shù)順序匹配(默認)println!("{}, {}", "a", "b")a, b
位置索引{n}按索引n(從 0 開始)匹配println!("{1}, {0}", "a", "b")b, a
命名{name}按參數(shù)名匹配println!("{x}, {y}", x=1, y=2)1, 2

填充與對齊

語法片段:[fill][align][width]

  • fill:任意單字符(默認空格);使用fill時需要同時指定align+width。
  • align<(左對齊)、>(右對齊,默認)、^(居中)。
  • width:最小字段寬度(整數(shù)),不足時使用 fill 填充。
形式說明示例輸出結(jié)果
固定寬度{:w}指定最小寬度println!("width: [{:*^5}]", 123);[*123*]
動態(tài)寬度{:width$}寬度由參數(shù)指定($是必須的)println!("[{:w$}]", 123, w=5);[ 123]
format!("{:>8}", "hi")       // 右對齊 -> "      hi"
format!("{:<8}", "hi")       // 左對齊 -> "hi      "
format!("{:^8}", "hi")       // 居中 -> "   hi   "
format!("{:0>5}", 42)        // 填充字符 '0', 右對齊 -> "00042"

精度

語法片段:.precision(寫作 .N 或 動態(tài) .*

適用類型含義示例輸出結(jié)果
字符串最大長度(超過則截斷)println!("{:.3}", "hello")hel
浮點數(shù)小數(shù)位數(shù)(四舍五入)println!("{:.2}", 3.1415)3.14
整數(shù)最小位數(shù)(不足補 0,超過則原樣輸出)println!("{:.4}", 12)0012
動態(tài)精度{:.*}精度由參數(shù)指定(前一個參數(shù)為精度值)println!("{}-{:.*}","ab", 2, 3.1415)ab-3.14

類型格式

指定數(shù)據(jù)的格式化類型,將數(shù)據(jù)轉(zhuǎn)換為特定格式的字符串。

整數(shù)類型

整數(shù)類型(i8/i16/i32/i64/u8/u16/…/usize/isize):

說明符作用示例輸出結(jié)果
b二進制println!("{:b}", 10)1010
o八進制println!("{:o}", 10)12
d十進制(默認)println!("{:d}", 10)10
x小寫十六進制println!("{:x}", 255)ff
X大寫十六進制println!("{:X}", 255)FF

浮點數(shù)類型

浮點數(shù)類型(f32/f64):

說明符作用示例輸出結(jié)果
f小數(shù)形式(默認)println!("{:f}", 123.456)123.456000
(默認 6 位小數(shù))
e科學(xué)計數(shù)法(小寫 e)println!("{:e}", 123.456)1.234560e+02
E科學(xué)計數(shù)法(大寫 E)println!("{:E}", 123.456)1.234560E+02
g自動選擇fe(取較短形式)println!("{:g}", 123456789.0)1.23457e+08
G自動選擇fEprintln!("{:G}", 123456789.0)1.23457E+08

通用與特殊類型

說明符作用適用場景示例輸出結(jié)果
?Debug trait 格式化(調(diào)試用)所有實現(xiàn)Debug
的類型
println!("{:?}", vec![1,2])[1, 2]
#?美化的Debug格式(換行 + 縮進)復(fù)雜結(jié)構(gòu)(如結(jié)構(gòu)體、嵌套集合)println!("{:#?}", vec![1,2])[\n 1,\n 2\n]
p指針地址僅用于引用類型println!("{:p}", &10)0x7ff72194e7b8

標(biāo)志(Flags)

特殊修飾符,用于調(diào)整輸出格式,可與其他說明符組合使用。

標(biāo)志作用示例輸出結(jié)果
#為數(shù)值添加前綴(二進制0b、八進制0o、十六進制0xprintln!("{:#x}", 255)0xff
+強制顯示正負號(正數(shù)顯+,負數(shù)顯-println!("{:+}", 10);
println!("{:+}", -10)
+10
-10
00填充(代替空格)println!("{:05}", 123)00123
_為大數(shù)值添加千位分隔符(僅整數(shù)和浮點數(shù))println!("{:_}", 1000000)1_000_000

特殊格式

語法示例說明
{{{{輸出左花括號 {
}}}}輸出右花括號 }

自定義Display獲取參數(shù)

當(dāng)在類型上實現(xiàn) fmt::Display 時,可以在 fmt(&self, f: &mut fmt::Formatter<'_>) 中讀取用戶給的 width、precisionalternate 等:

use std::fmt;
struct Point { x: f64, y: f64 }
impl fmt::Display for Point {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        // 獲取 width / precision(Option<usize>)
        if let Some(prec) = f.precision() {
            write!(f, "({:.prec$}, {:.prec$})", self.x, self.y)
        } else if f.alternate() {
            // 如果用戶寫了 "{:#}",可切換格式
            write!(f, "Point {{ x: {}, y: {} }}", self.x, self.y)
        } else {
            write!(f, "({}, {})", self.x, self.y)
        }
    }
}

到此這篇關(guān)于Rust中字符串與格式化操作方法的文章就介紹到這了,更多相關(guān)Rust字符串格式化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Rust中自定義Debug調(diào)試輸出的示例詳解

    Rust中自定義Debug調(diào)試輸出的示例詳解

    這篇文章主要介紹了Rust中自定義Debug調(diào)試輸出的示例詳解,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Rust實現(xiàn)AES加解密詳解

    Rust實現(xiàn)AES加解密詳解

    這篇文章主要為大家詳細介紹了如何利用Rust語言實現(xiàn)AES加解密算法,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以了解一下
    2022-10-10
  • 使用Rust語言編寫一個ChatGPT桌面應(yīng)用示例詳解

    使用Rust語言編寫一個ChatGPT桌面應(yīng)用示例詳解

    這篇文章主要介紹了如何用Rust編寫一個ChatGPT桌面應(yīng)用,文中有詳細的流程介紹,對大家的學(xué)習(xí)或工作有意一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Rust 原始指針功能探索

    Rust 原始指針功能探索

    這篇文章主要為大家介紹了Rust 原始指針功能探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Rust常用特型之Drop特型

    Rust常用特型之Drop特型

    本文主要介紹了Rust常用特型之Drop特型,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Rust?duckdb和polars讀csv文件比較情況

    Rust?duckdb和polars讀csv文件比較情況

    duckdb在數(shù)據(jù)分析上,有非常多不錯的特質(zhì),1、快;2、客戶體驗好,特別是可以同時批量讀csv在一個目錄下的csv等文件,今天來比較下Rust?duckdb和polars讀csv文件比較的情況,感興趣的朋友一起看看吧
    2024-06-06
  • 利用rust實現(xiàn)一個命令行工具

    利用rust實現(xiàn)一個命令行工具

    這篇文章主要為大家詳細介紹了如何使用?Rust?和?clap?4.4.0?創(chuàng)建一個命令行工具?my_dev_tool,文中的示例代碼講解詳細,需要的小伙伴可以參考下
    2023-12-12
  • 深入理解 Rust 中的模式匹配語法(最新推薦)

    深入理解 Rust 中的模式匹配語法(最新推薦)

    Rust中的模式匹配提供了多種方式來處理不同的數(shù)據(jù)類型和場景,本文給大家介紹Rust 中的模式匹配語法,感興趣的朋友一起看看吧
    2025-03-03
  • Rust處理命令行參數(shù)

    Rust處理命令行參數(shù)

    在Rust中,命令行參數(shù)是程序從命令行接收的輸入,它們?yōu)槌绦蛱峁┝诉\行時配置和數(shù)據(jù)的靈活性,本文就來介紹一下Rust處理命令行參數(shù),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Windows下Rust自定義路徑安裝全攻略【保姆級教程】

    Windows下Rust自定義路徑安裝全攻略【保姆級教程】

    Rust被設(shè)計為能夠處理大量的并發(fā)和高性能的軟件,這使得它適合在游戲開發(fā)、操作系統(tǒng)開發(fā)、瀏覽器引擎開發(fā)以及嵌入式系統(tǒng)等領(lǐng)域發(fā)揮巨大的作用,這篇文章主要介紹了Windows下Rust自定義路徑安裝的相關(guān)資料,需要的朋友可以參考下
    2026-02-02

最新評論

南通市| 高邮市| 达州市| 扎兰屯市| 中西区| 富民县| 太保市| 阿坝县| 文成县| 西畴县| 通州区| 罗定市| 迁西县| 舟曲县| 开封县| 炎陵县| 柯坪县| 高阳县| 大兴区| 渭源县| 平安县| 循化| 驻马店市| 雷山县| 龙胜| 赤水市| 东源县| 曲靖市| 揭东县| 新乐市| 吉林省| 宜章县| 余姚市| 朝阳市| 日喀则市| 平舆县| 个旧市| 浙江省| 于田县| 光山县| 手游|