rust-char

Unicode方法

is_numeric()

判断字符是否为任何 Unicode 数字字

  • 十进制数字:0-9,以及各种语言的数字字符
  • 带圈数字:①②③④⑤⑥⑦⑧⑨⑩等
  • 分数形式:¼ ½ ¾ 等
  • 其他数字形式:罗马数字、汉字数字等
fn main() {
    println!("{}", '1'.is_numeric());     // true - ASCII 数字
    println!("{}", 'V'.is_numeric());     // false - 拉丁字母
    println!("{}", 'Ⅴ'.is_numeric());    // true - 罗马数字字符
    println!("{}", '⑤'.is_numeric());    // true - 带圈数字5
    println!("{}", '五'.is_numeric());    // false - 汉字"五"不是数字字符
    println!("{}", '५'.is_numeric());    // true - 天城文数字5
}

is_alphabetic()

  • 功能:判断字符是否为字母字符
  • 范围:只包括各种语言的字母(不限于 ASCII)
  • 不包括:数字、符号等

is_alphanumeric()

  • 功能:判断字符是否为字母或数字字符
  • 范围:字母 + 数字(不限于 ASCII)
  • 包括:各种语言的字母和数字

详细对比

字符 is_alphabetic() is_alphanumeric() 说明
'a' true true ASCII
'Z' true true ASCII 大写字母
'中' true true 中文汉字(字母类)
'5' false true 数字
' ' false false
'Ⅴ' true true 罗马数字(字母类)
'⑤' false true 带圈数字(数字类)

is_whitespace()

is_ascii_whitespace()is_whitespace()的子集

  • 功能:判断字符是否为任何 Unicode 空白字符
  • 范围:包含所有 Unicode 标准定义的空白字符
  • 包含:ASCII 空白字符 + 各种语言的空白字符

ASCII方法

is_ascii_alphabetic()

是否是 ASCII 字母(a-z, A-Z)

fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_alphabetic()); // true

    let s = '中';
    println!("{}", s.is_ascii_alphabetic()); // false

    let s = 'Z';
    println!("{}", s.is_ascii_alphabetic()); // true

    let s = '0';
    println!("{}", s.is_ascii_alphabetic()); // false
}

is_ascii_alphanumeric()

是否是 ASCII 字母或数字(a-z, A-Z, 0-9)

fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_alphanumeric()); // true

    let s = '中';
    println!("{}", s.is_ascii_alphanumeric()); // false

    let s = 'Z';
    println!("{}", s.is_ascii_alphanumeric()); // true

    let s = '0';
    println!("{}", s.is_ascii_alphanumeric()); // true
}

is_ascii_digit()

是否是 ASCII 数字(0-9)

fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_digit()); // false

    let s = '中';
    println!("{}", s.is_ascii_digit()); // false

    let s = 'Z';
    println!("{}", s.is_ascii_digit()); // false

    let s = '0';
    println!("{}", s.is_ascii_digit()); // true
}

is_ascii_hexdigit()

是否是 ASCII 十六进制数字(0-9, a-f, A-F)

fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_hexdigit()); // true

    let s = 'A';
    println!("{}", s.is_ascii_hexdigit()); // true

    let s = 'F';
    println!("{}", s.is_ascii_hexdigit()); // true

    let s = 'f';
    println!("{}", s.is_ascii_hexdigit()); // true

    let s = 'z';
    println!("{}", s.is_ascii_hexdigit()); // true
}

is_ascii_punctuation()

是否是 ASCII 符号(! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~)

fn main() {
    let s = '?';
    println!("{}", s.is_ascii_punctuation()); // true

    let s = '&';
    println!("{}", s.is_ascii_punctuation()); // true

    let s = '[';
    println!("{}", s.is_ascii_punctuation()); // true

    let s = '|';
    println!("{}", s.is_ascii_punctuation()); // true
}

is_ascii_graphic()

是否是可打印字符(字母、数字、标点符号、符号)
只包含可见的ASCII字符范围(33-126),不包含空格

fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_graphic()); // true

    let s = 'Z';
    println!("{}", s.is_ascii_graphic()); // true

    let s = '0';
    println!("{}", s.is_ascii_graphic()); // true

    let s = '|';
    println!("{}", s.is_ascii_graphic()); // true

    let s = '\t';
    println!("{}", s.is_ascii_graphic()); // false

    let s = ' ';
    println!("{}", s.is_ascii_graphic()); // false
}

is_ascii_whitespace()

是否是 ASCII 空白字符(\t, \n, \x0b, \x0c, \r, ' ')

转义序列 含义 描述
\t 制表符(Tab) 水平制表符,通常缩进8个空格
\n 换行符(Line Feed) 移动到下一行
\x0b 垂直制表符(Vertical Tab) 垂直方向的制表符
\x0c 换页符(Form Feed) 开始新的页面或段落
\r 回车符(Carriage Return) 移动到行首
' ' 普通空格 空格字符
fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_whitespace()); // false

    let s = '0';
    println!("{}", s.is_ascii_whitespace()); // false

    let s = '|';
    println!("{}", s.is_ascii_whitespace()); // false

    let s = '中';
    println!("{}", s.is_ascii_whitespace()); // false

    let s = '\t';
    println!("{}", s.is_ascii_whitespace()); // true

    let s = ' ';
    println!("{}", s.is_ascii_whitespace()); // true
}

is_ascii_uppercase()

是否是大写字母(A-Z)

fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_uppercase()); // false

    let s = 'Z';
    println!("{}", s.is_ascii_uppercase()); // true
}

is_ascii_lowercase()

是否是小写字母(a-z)

fn main() {
    let s = 'a';
    println!("{}", s.is_ascii_lowercase()); // true

    let s = 'Z';
    println!("{}", s.is_ascii_lowercase()); // false

数字处理

to_digit(radix)

radix: 数学中表示进制的基数

fn main() {
    // 十进制转换
    println!("{:?}", '5'.to_digit(10));    // Some(5)
    
    // 十六进制转换
    println!("{:?}", 'A'.to_digit(16));    // Some(10)
    println!("{:?}", 'f'.to_digit(16));    // Some(15)
    
    // 二进制转换
    println!("{:?}", '1'.to_digit(2));     // Some(1)
    
    // 八进制转换
    println!("{:?}", '7'.to_digit(8));     // Some(7)
    
    // 超出进制范围的字符
    println!("{:?}", 'G'.to_digit(16));    // None (G不在0-9,A-F范围内)
}

is_digit(radix)

判断字符是否是指定 进制(radix)下的有效数字字符

fn main() {
    println!("{}", '5'.is_digit(10));  // true  (十进制)
    println!("{}", 'f'.is_digit(16));  // true  (十六进制)
    println!("{}", 'F'.is_digit(16));  // true  (大小写都行)
    println!("{}", 'g'.is_digit(16));  // false (g 超出十六进制范围)

    println!("{}", '7'.is_digit(8));   // true  (八进制)
    println!("{}", '8'.is_digit(8));   // false (八进制最大是 7)

    // 注意:它不识别非 ASCII 数字!
    println!("{}", '²'.is_digit(10));  // false (上标 2 不是 digit)
    println!("{}", 'Ⅴ'.is_digit(10));  // false (罗马数字 V 不是 digit)
}

转换大小写

to_uppercase()

转换为大写

fn main() {
    let s = 'a';
    println!("{}", s.to_uppercase());  // A
}

to_lowercase()

转换为小写

fn main() {
    let s = 'F';
    println!("{}", s.to_lowercase());  // f
}

与整数互转

as

转换为对应的整数,会抹掉高位

fn main() {
    let s = 'F' as u8;
    println!("{}", s); // 70


    // 字符 '你' 的 Unicode 码点是 U+4E48
    // U+4E48 的十进制表示是 20320

    // 20320 ÷ 256 = 79 余 96
    let s = '你' as u8;
    println!("{}", s); // 96 抹掉高位

    

    let s = '你' as u16;
    println!("{}", s); // 20320

    let s = '你' as u32;
    println!("{}", s); // 20320
}

std::char::from_u32(u32)

fn main() {
    // 安全转换
    let ch = std::char::from_u32(65).unwrap();
    println!("{}", ch); // 输出 'A'

    // 强制转换
    println!("{}", 65 as char);
}
posted @ 2026-08-10 10:13  lxd670  阅读(5)  评论(0)    收藏  举报