Rust: trim(),trim_matches()等江南六怪......

本文介绍了Rust语言中用于字符串处理的六个核心trim函数:trim、trim_left、trim_right、trim_matches、trim_left_matches和trim_right_matches。通过具体示例展示了如何使用这些函数去除字符串前后的特定字符,为开发者提供了实用的编程指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rust关于trim类的函数有6个,简称江南六怪,功能十分强大,值得我们了解一下。
先看官方文档,再找机会展开。

需要说明的,trim只是“边裁”。或两边,或右边,或左边。

一、官方文档

1、trim

let s = " Hello\tworld\t";
assert_eq!("Hello\tworld", s.trim());

2、trim_left

let s = " Hello\tworld\t";
assert_eq!("Hello\tworld\t", s.trim_left());

3、trim_right

let s = " Hello\tworld\t";
assert_eq!(" Hello\tworld", s.trim_right());

4、trim_matches

assert_eq!("11foo1bar11".trim_matches('1'), "foo1bar");
assert_eq!("123foo1bar123".trim_matches(char::is_numeric), "foo1bar");

let x: &[_] = &['1', '2'];
assert_eq!("12foo1bar12".trim_matches(x), "foo1bar");

5、trim_left_matches

assert_eq!("11foo1bar11".trim_left_matches('1'), "foo1bar11");
assert_eq!("123foo1bar123".trim_left_matches(char::is_numeric), "foo1bar123");

let x: &[_] = &['1', '2'];
assert_eq!("12foo1bar12".trim_left_matches(x), "foo1bar12");

6、trim_right_matches

assert_eq!("11foo1bar11".trim_right_matches('1'), "11foo1bar");
assert_eq!("123foo1bar123".trim_right_matches(char::is_numeric), "123foo1bar");

let x: &[_] = &['1', '2'];
assert_eq!("12foo1bar12".trim_right_matches(x), "12foo1bar");

assert_eq!("1fooX".trim_left_matches(|c| c == '1' || c == 'X'), "fooX");

二、其它(待续)

类似相关的功能可以使用replace(),&str,String()都可以。

    let a_string = "123foo1bar123".to_string();
    let a_str = "123foo1bar123";

    let b_string = a_string.replace("123", "");
    let b_str = a_str.replace("123", "");
    println!("b_string:{:?} b_str:{:?}", b_string, b_str);   
Rust中,如果你想要通过`winapi`库获取Windows系统上的CPU硬件ID(如哈希或型号等),通常需要访问硬件描述符数据库,这超出了标准库的范围。不过,可以借助第三方库,比如`winapi-x86_64-pc-windows-gnu`配合`cfg-if`条件编译,以便在Windows平台上实现。 以下是一个基本的例子,使用`winapi`库尝试获取处理器制造商和产品名称,但这并不能直接得到CPU硬件ID,因为`winapi`本身并不提供完整的硬件识别服务: ```rust #[cfg(target_os = "windows")] use std::ffi::OsStr; use winapi::um::winbase::{GetLogicalProcessorInformation, SYSTEM_LOGICAL_PROCESSOR_INFORMATION}; use winapi::um::winnt::{SYSTEM_INFO, PROCESSOR_ARCHITECTURE, LOGICAL_PROCESSOR_RELATIONSHIP}; // 获取处理器信息 fn get_processor_info() -> Option<String> { let mut si = unsafe { std::mem::zeroed::<SYSTEM_INFO>() }; si.Length = memsize!(si); let success = unsafe { GetSystemInfo(&si) }; if !success { return None; } // 根据处理器架构选择正确的处理器信息类型 let architecture = si.wProcessorArchitecture as u32; let info_size = match architecture { PROCESSOR_ARCHITECTURE_X86 => memsize!(SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX) as usize, _ => return None, // 不支持其他架构 }; let mut buffer = Vec::with_capacity(info_size); buffer.set_len(info_size); let handle = unsafe { GetLogicalProcessorInformation(buffer.as_mut_ptr(), info_size as size_t) }; if handle == 0 { return None; } let processor_info = unsafe { SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX::from_raw_parts_mut(buffer.as_mut_ptr(), buffer.len()) }; let cpu_count = processor_info.ProcessorIds.len(); let mut hardware_ids = String::new(); for (index, id) in processor_info.ProcessorIds.iter().enumerate() { let manufacturer = OsStr::from_wide(processor_info.Manufacturer).decode_utf8_lossy().to_string(); let product_name = OsStr::from_wide(processor_info.Product).decode_utf8_lossy().to_string(); hardware_ids.push_str(&format!("Processor #{} - Manufacturer: {}, Product: {}\n", index, manufacturer, product_name)); } Some(hardware_ids.trim_end_matches('\n')) } fn main() { match get_processor_info() { Some(id_info) => println!("{}", id_info), None => println!("Failed to retrieve CPU information"), } } ``` 注意,这个示例只能获取处理器制造商和产品名,并非严格的硬件ID。真正的硬件ID通常由主板BIOS生成并保存在硬件上,可能需要额外的BIOS读取工具或者硬件检测库才能获得。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值