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);
}

浙公网安备 33010602011771号