Primitive Type char1.0.0[−]
Expand description
一个字符类型。
char
类型代表一个字符。
更具体地说,由于 ‘character’ 不是 Unicode 中定义明确的概念,因此 char
是 [Unicode 标量值]
,与 [Unicode 代码点]
相似但不相同。
本文档描述了 char
类型上的许多方法和 trait 实现。
由于技术原因,the std::char
module 中还有其他单独的文档。
Representation
char
大小始终为四个字节。这与给定字符作为 String
的一部分的表示形式不同。例如:
let v = vec!['h', 'e', 'l', 'l', 'o']; // 五个元素乘以每个元素四个字节 assert_eq!(20, v.len() * std::mem::size_of::<char>()); let s = String::from("hello"); // 5 个元素乘以每个元素一个字节 assert_eq!(5, s.len() * std::mem::size_of::<u8>());Run
与往常一样,请记住,对于 ‘character’ 的直观理解可能不会 map 到 Unicode 的定义。 例如,尽管看起来相似,但 ‘é’ 字符是一个 Unicode 代码点,而 ‘é’ 是两个 Unicode 代码点:
let mut chars = "é".chars(); // U+00e9: 带有小写字母的拉丁小写字母 e assert_eq!(Some('\u{00e9}'), chars.next()); assert_eq!(None, chars.next()); let mut chars = "é".chars(); // U+0065: 拉丁小写字母 e assert_eq!(Some('\u{0065}'), chars.next()); // U+0301: 结合重音 assert_eq!(Some('\u{0301}'), chars.next()); assert_eq!(None, chars.next());Run
这意味着 will 上方的第一个字符串的内容适合 char
,而第二个字符串 will 的内容则不会。
尝试使用第二个字符串的内容创建 char
字面量会产生错误:
error: character literal may only contain one codepoint: 'é'
let c = 'é';
^^^
char
的 4 字节固定大小的另一个含义是,每个字符处理可能最终会使用更多的内存:
let s = String::from("love: ❤️"); let v: Vec<char> = s.chars().collect(); assert_eq!(12, std::mem::size_of_val(&s[..])); assert_eq!(32, std::mem::size_of_val(&v[..]));Run
Implementations
char
可以具有的最高有效代码点。
char
是 Unicode Scalar Value,这意味着它是 Code Point,但仅在一定范围内。
MAX
是有效 Unicode Scalar Value 的最高有效代码点。
U+FFFD REPLACEMENT CHARACTER
() 在 Unicode 中用于表示解码错误。
例如,当将格式错误的 UTF-8 字节提供给 String::from_utf8_lossy
时,可能会发生这种情况。
char
和 str
方法的 Unicode 部分所基于的 Unicode 版本。
Unicode 的新版本会定期发布,随后会更新标准库中取决于 Unicode 的所有方法。
因此,某些 char
和 str
方法的行为以及该常量的值会随时间变化。
这不是一个突破性的改变。
版本编号方案在 Unicode 11.0 或更高版本,第 3.1 节 Unicode 标准版本 中进行了说明。
pub fn decode_utf16<I>(iter: I) -> DecodeUtf16<<I as IntoIterator>::IntoIter>ⓘNotable traits for DecodeUtf16<I>impl<I> Iterator for DecodeUtf16<I> where
I: Iterator<Item = u16>, type Item = Result<char, DecodeUtf16Error>;
where
I: IntoIterator<Item = u16>,
1.52.0[src]
pub fn decode_utf16<I>(iter: I) -> DecodeUtf16<<I as IntoIterator>::IntoIter>ⓘNotable traits for DecodeUtf16<I>impl<I> Iterator for DecodeUtf16<I> where
I: Iterator<Item = u16>, type Item = Result<char, DecodeUtf16Error>;
where
I: IntoIterator<Item = u16>,
1.52.0[src]impl<I> Iterator for DecodeUtf16<I> where
I: Iterator<Item = u16>, type Item = Result<char, DecodeUtf16Error>;
在 iter
中的 UTF-16 编码的代码点上创建一个迭代器,将不成对的代理返回为 Err
s。
Examples
基本用法:
use std::char::decode_utf16; // 𝄞mus<invalid>ic<invalid> let v = [ 0xD834, 0xDD1E, 0x006d, 0x0075, 0x0073, 0xDD1E, 0x0069, 0x0063, 0xD834, ]; assert_eq!( decode_utf16(v) .map(|r| r.map_err(|e| e.unpaired_surrogate())) .collect::<Vec<_>>(), vec![ Ok('𝄞'), Ok('m'), Ok('u'), Ok('s'), Err(0xDD1E), Ok('i'), Ok('c'), Err(0xD834) ] );Run
通过用替换字符替换 Err
结果,可以获得有损解码器:
use std::char::{decode_utf16, REPLACEMENT_CHARACTER}; // 𝄞mus<invalid>ic<invalid> let v = [ 0xD834, 0xDD1E, 0x006d, 0x0075, 0x0073, 0xDD1E, 0x0069, 0x0063, 0xD834, ]; assert_eq!( decode_utf16(v) .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER)) .collect::<String>(), "𝄞mus�ic�" );Run
将 u32
转换为 char
。
请注意,所有的 char
s 都是有效的 u32
,并且可以使用以下命令将其强制转换为 1
as
:
let c = '💯'; let i = c as u32; assert_eq!(128175, i);Run
但是,相反的情况并非如此: 并非所有有效的 u32 都是有效的 char。
from_u32()
如果输入的值不是 char
的有效值,则将返回 None
。
有关忽略这些检查的该函数的不安全版本,请参见 from_u32_unchecked
。
Examples
基本用法:
use std::char; let c = char::from_u32(0x2764); assert_eq!(Some('❤'), c);Run
当输入不是有效的 char
时返回 None
:
use std::char; let c = char::from_u32(0x110000); assert_eq!(None, c);Run
将 u32
转换为 char
,而忽略有效性。
请注意,所有的 char
s 都是有效的 u32
,并且可以使用以下命令将其强制转换为 1
as
:
let c = '💯'; let i = c as u32; assert_eq!(128175, i);Run
但是,相反的情况并非如此: 并非所有有效的 u32 都是有效的 char。
from_u32_unchecked()
会忽略这一点,并盲目地将其强制转换为 char
,从而可能创建无效的 char
。
Safety
该函数是不安全的,因为它可能创建无效的 char
值。
有关此函数的安全版本,请参见 from_u32
函数。
Examples
基本用法:
use std::char; let c = unsafe { char::from_u32_unchecked(0x2764) }; assert_eq!('❤', c);Run
将给定基数中的数字转换为 char
。
这里的 ‘radix’ 有时也称为 ‘base’。 基数 2 表示二进制数,以十进制表示的十进制,以十六进制表示十六进制的基数,以给出一些公共值。
支持任意基数。
from_digit()
如果输入不是给定基数中的数字,则将返回 None
。
Panics
Panics (如果基数大于 36)。
Examples
基本用法:
use std::char; let c = char::from_digit(4, 10); assert_eq!(Some('4'), c); // 十进制 11 是以 16 为底的一位数字 let c = char::from_digit(11, 16); assert_eq!(Some('b'), c);Run
当输入不是数字时返回 None
:
use std::char; let c = char::from_digit(20, 10); assert_eq!(None, c);Run
传递较大的基数,导致 panic:
use std::char; // 这个 panics char::from_digit(1, 37);Run
检查 char
是否为给定基数中的数字。
这里的 ‘radix’ 有时也称为 ‘base’。 基数 2 表示二进制数,以十进制表示的十进制,以十六进制表示十六进制的基数,以给出一些公共值。
支持任意基数。
与 is_numeric()
相比,此函数仅识别字符 0-9
,a-z
和 A-Z
。
‘Digit’ 被定义为仅以下字符:
0-9
a-z
A-Z
要更全面地了解 ‘digit’,请参见 is_numeric()
。
Panics
Panics (如果基数大于 36)。
Examples
基本用法:
assert!('1'.is_digit(10)); assert!('f'.is_digit(16)); assert!(!'f'.is_digit(10));Run
传递较大的基数,导致 panic:
// 这个 panics '1'.is_digit(37);Run
将 char
转换为给定基数的数字。
这里的 ‘radix’ 有时也称为 ‘base’。 基数 2 表示二进制数,以十进制表示的十进制,以十六进制表示十六进制的基数,以给出一些公共值。
支持任意基数。
‘Digit’ 被定义为仅以下字符:
0-9
a-z
A-Z
Errors
如果 char
未引用给定基数中的数字,则返回 None
。
Panics
Panics (如果基数大于 36)。
Examples
基本用法:
assert_eq!('1'.to_digit(10), Some(1)); assert_eq!('f'.to_digit(16), Some(15));Run
传递非数字会导致失败:
assert_eq!('f'.to_digit(10), None); assert_eq!('z'.to_digit(16), None);Run
传递较大的基数,导致 panic:
// 这个 panics '1'.to_digit(37);Run
pub fn escape_unicode(self) -> EscapeUnicodeⓘNotable traits for EscapeUnicodeimpl Iterator for EscapeUnicode type Item = char;
[src]
pub fn escape_unicode(self) -> EscapeUnicodeⓘNotable traits for EscapeUnicodeimpl Iterator for EscapeUnicode type Item = char;
[src]impl Iterator for EscapeUnicode type Item = char;
返回一个迭代器,该迭代器将字符的十六进制 Unicode 转义生成为 char
s。
这将使用 \u{NNNNNN}
格式的 Rust 语法对字符进行转义,其中 NNNNNN
是十六进制表示形式。
Examples
作为迭代器:
for c in '❤'.escape_unicode() { print!("{}", c); } println!();Run
直接使用 println!
:
println!("{}", '❤'.escape_unicode());Run
两者都等同于:
println!("\\u{{2764}}");Run
使用 to_string
:
assert_eq!('❤'.escape_unicode().to_string(), "\\u{2764}");Run
pub fn escape_debug(self) -> EscapeDebugⓘNotable traits for EscapeDebugimpl Iterator for EscapeDebug type Item = char;
1.20.0[src]
pub fn escape_debug(self) -> EscapeDebugⓘNotable traits for EscapeDebugimpl Iterator for EscapeDebug type Item = char;
1.20.0[src]impl Iterator for EscapeDebug type Item = char;
pub fn escape_default(self) -> EscapeDefaultⓘNotable traits for EscapeDefaultimpl Iterator for EscapeDefault type Item = char;
[src]
pub fn escape_default(self) -> EscapeDefaultⓘNotable traits for EscapeDefaultimpl Iterator for EscapeDefault type Item = char;
[src]impl Iterator for EscapeDefault type Item = char;
返回一个迭代器,该迭代器将字符的字面量转义码生成为 char
s。
选择默认值时会偏向于生成在多种语言 (包括 C++ 11 和类似的 C 系列语言) 中都合法的字面量。 确切的规则是:
- 制表符被转义为
\t
。 - 回车符被转义为
\r
。 - 换行符转为
\n
。 - 单引号转义为
\'
。 - 双引号转义为
\"
。 - 反斜杠转义为
\\
。 可打印 ASCII
范围0x20
.. 中的任何字符0x7e
(含0x7e
) 不会转义。- 所有其他字符均使用十六进制 Unicode 转义; 请参见
escape_unicode
。
Examples
作为迭代器:
for c in '"'.escape_default() { print!("{}", c); } println!();Run
直接使用 println!
:
println!("{}", '"'.escape_default());Run
两者都等同于:
println!("\\\"");Run
使用 to_string
:
assert_eq!('"'.escape_default().to_string(), "\\\"");Run
返回以 UTF-8 编码时此 char
所需的字节数。
该字节数始终在 1 到 4 之间 (含 1 和 4)。
Examples
基本用法:
let len = 'A'.len_utf8(); assert_eq!(len, 1); let len = 'ß'.len_utf8(); assert_eq!(len, 2); let len = 'ℝ'.len_utf8(); assert_eq!(len, 3); let len = '💣'.len_utf8(); assert_eq!(len, 4);Run
&str
类型保证其内容为 UTF-8,因此我们可以比较将每个代码点表示为 char
相对于 &str
本身所花费的长度:
// 作为字符 let eastern = '東'; let capital = '京'; // 两者都可以表示为三个字节 assert_eq!(3, eastern.len_utf8()); assert_eq!(3, capital.len_utf8()); // 作为 &str,这两个编码为 UTF-8 let tokyo = "東京"; let len = eastern.len_utf8() + capital.len_utf8(); // 我们可以看到它们总共占用了六个字节... assert_eq!(6, tokyo.len()); // ... 就像 &str assert_eq!(len, tokyo.len());Run
返回以 UTF-16 编码时 char
所需的 16 位代码单元的数量。
有关此概念的更多说明,请参见 len_utf8()
的文档。
该函数是一个镜像,但是用于 UTF-16 而不是 UTF-8。
Examples
基本用法:
let n = 'ß'.len_utf16(); assert_eq!(n, 1); let len = '💣'.len_utf16(); assert_eq!(len, 2);Run
将此字符编码为 UTF-8 到提供的字节缓冲区中,然后返回包含编码字符的缓冲区的子片段。
Panics
Panics (如果缓冲区不够大)。
长度为四的缓冲区足够大,可以对任何 char
进行编码。
Examples
在这两个示例中,‘ß’ 占用两个字节进行编码。
let mut b = [0; 2]; let result = 'ß'.encode_utf8(&mut b); assert_eq!(result, "ß"); assert_eq!(result.len(), 2);Run
缓冲区太小:
let mut b = [0; 1]; // 这个 panics 'ß'.encode_utf8(&mut b);Run
将此字符编码为 UTF-16 到提供的 u16
缓冲区中,然后返回包含编码字符的缓冲区的子片段。
Panics
Panics (如果缓冲区不够大)。
长度为 2 的缓冲区足够大,可以对任何 char
进行编码。
Examples
在这两个示例中,‘𝕊’ 都需要两个 u16 进行编码。
let mut b = [0; 2]; let result = '𝕊'.encode_utf16(&mut b); assert_eq!(result.len(), 2);Run
缓冲区太小:
let mut b = [0; 1]; // 这个 panics '𝕊'.encode_utf16(&mut b);Run
如果此 char
具有 Alphabetic
属性,则返回 true
。
Alphabetic
在 [Unicode 标准] 的第 4 章 (字符属性) 中进行了说明,并在 Unicode 字符数据库 DerivedCoreProperties.txt
中进行了指定。
Examples
基本用法:
assert!('a'.is_alphabetic()); assert!('京'.is_alphabetic()); let c = '💝'; // love 有很多东西,但它不是按字母顺序排列的 assert!(!c.is_alphabetic());Run
如果此 char
具有 Lowercase
属性,则返回 true
。
Lowercase
在 [Unicode 标准] 的第 4 章 (字符属性) 中进行了说明,并在 Unicode 字符数据库 DerivedCoreProperties.txt
中进行了指定。
Examples
基本用法:
assert!('a'.is_lowercase()); assert!('δ'.is_lowercase()); assert!(!'A'.is_lowercase()); assert!(!'Δ'.is_lowercase()); // 各种中文脚本和标点符号没有大小写,因此: assert!(!'中'.is_lowercase()); assert!(!' '.is_lowercase());Run
如果此 char
具有 Uppercase
属性,则返回 true
。
Uppercase
在 [Unicode 标准] 的第 4 章 (字符属性) 中进行了说明,并在 Unicode 字符数据库 DerivedCoreProperties.txt
中进行了指定。
Examples
基本用法:
assert!(!'a'.is_uppercase()); assert!(!'δ'.is_uppercase()); assert!('A'.is_uppercase()); assert!('Δ'.is_uppercase()); // 各种中文脚本和标点符号没有大小写,因此: assert!(!'中'.is_uppercase()); assert!(!' '.is_uppercase());Run
如果此 char
具有 White_Space
属性,则返回 true
。
White_Space
在 Unicode 字符数据库 PropList.txt
中指定。
Examples
基本用法:
assert!(' '.is_whitespace()); // 一个不间断空格 assert!('\u{A0}'.is_whitespace()); assert!(!'越'.is_whitespace());Run
如果此 char
满足 is_alphabetic()
或 is_numeric()
,则返回 true
。
Examples
基本用法:
assert!('٣'.is_alphanumeric()); assert!('7'.is_alphanumeric()); assert!('৬'.is_alphanumeric()); assert!('¾'.is_alphanumeric()); assert!('①'.is_alphanumeric()); assert!('K'.is_alphanumeric()); assert!('و'.is_alphanumeric()); assert!('藏'.is_alphanumeric());Run
如果此 char
具有控制代码的常规类别,则返回 true
。
[Unicode 标准] 的第 4 章 (字符属性) 中描述了控制代码 (具有 Cc
的常规类别的代码点),并在 Unicode 字符数据库 UnicodeData.txt
中进行了指定。
Examples
基本用法:
// U+009C, 终止符 assert!(''.is_control()); assert!(!'q'.is_control());Run
如果此 char
具有数字的常规类别之一,则返回 true
。
在 Unicode 字符数据库 UnicodeData.txt
中指定了数字的常规类别 (Nd
表示十进制数字,Nl
表示类似字母的数字字符,No
表示其他数字字符)。
Examples
基本用法:
assert!('٣'.is_numeric()); assert!('7'.is_numeric()); assert!('৬'.is_numeric()); assert!('¾'.is_numeric()); assert!('①'.is_numeric()); assert!(!'K'.is_numeric()); assert!(!'و'.is_numeric()); assert!(!'藏'.is_numeric());Run
pub fn to_lowercase(self) -> ToLowercaseⓘNotable traits for ToLowercaseimpl Iterator for ToLowercase type Item = char;
[src]
pub fn to_lowercase(self) -> ToLowercaseⓘNotable traits for ToLowercaseimpl Iterator for ToLowercase type Item = char;
[src]impl Iterator for ToLowercase type Item = char;
返回一个迭代器,该迭代器将这个 char
的小写字母映射为一个或多个
char
s.
如果此 char
没有小写映射,则迭代器将产生相同的 char
。
如果此 char
具有 Unicode 字符数据库 UnicodeData.txt
给出的一对一小写映射,则迭代器将产生该 char
。
如果此 char
需要特殊考虑 (例如,多个 char),则迭代器将产生 SpecialCasing.txt
给定的 char。
此操作无需裁剪即可执行无条件映射。即,转换独立于上下文和语言。
在 [Unicode 标准] 中,第 4 章 (字符属性) 通常讨论大小写映射,而第 3 章 (一致性) 讨论大小写转换的默认算法。
Examples
作为迭代器:
for c in 'İ'.to_lowercase() { print!("{}", c); } println!();Run
直接使用 println!
:
println!("{}", 'İ'.to_lowercase());Run
两者都等同于:
println!("i\u{307}");Run
使用 to_string
:
assert_eq!('C'.to_lowercase().to_string(), "c"); // 有时结果是多个字符: assert_eq!('İ'.to_lowercase().to_string(), "i\u{307}"); // 同时没有大写和小写字母的字符会转换成自己。 assert_eq!('山'.to_lowercase().to_string(), "山");Run
pub fn to_uppercase(self) -> ToUppercaseⓘNotable traits for ToUppercaseimpl Iterator for ToUppercase type Item = char;
[src]
pub fn to_uppercase(self) -> ToUppercaseⓘNotable traits for ToUppercaseimpl Iterator for ToUppercase type Item = char;
[src]impl Iterator for ToUppercase type Item = char;
返回一个迭代器,该迭代器将这个 char
的大写映射生成为一个或多个
char
s.
如果此 char
没有大写映射,则迭代器将产生相同的 char
。
如果此 char
具有 Unicode 字符数据库 UnicodeData.txt
给出的一对一大写映射,则迭代器将产生该 char
。
如果此 char
需要特殊考虑 (例如,多个 char),则迭代器将产生 SpecialCasing.txt
给定的 char。
此操作无需裁剪即可执行无条件映射。即,转换独立于上下文和语言。
在 [Unicode 标准] 中,第 4 章 (字符属性) 通常讨论大小写映射,而第 3 章 (一致性) 讨论大小写转换的默认算法。
Examples
作为迭代器:
for c in 'ß'.to_uppercase() { print!("{}", c); } println!();Run
直接使用 println!
:
println!("{}", 'ß'.to_uppercase());Run
两者都等同于:
println!("SS");Run
使用 to_string
:
assert_eq!('c'.to_uppercase().to_string(), "C"); // 有时结果是多个字符: assert_eq!('ß'.to_uppercase().to_string(), "SS"); // 同时没有大写和小写字母的字符会转换成自己。 assert_eq!('山'.to_uppercase().to_string(), "山");Run
关于语言环境说明
在土耳其语中,相当于 ‘i’ 的拉丁语具有 5 种形式,而不是 2 种形式:
- ‘Dotless’: I / ı,有时写成 ï
- ‘Dotted’: İ / i
注意,小写的点缀 ‘i’ 与拉丁字母相同。Therefore:
let upper_i = 'i'.to_uppercase().to_string();Run
upper_i
的值在此取决于文本的语言: 如果我们在 en-US
中,则应为 "I"
,但如果我们在 tr_TR
中,则应为 "İ"
。
to_uppercase()
没有考虑到这一点,因此:
let upper_i = 'i'.to_uppercase().to_string(); assert_eq!(upper_i, "I");Run
适用于多种语言。
使值的副本等效于其 ASCII 大写字母。
ASCII 字母 ‘a’ 到 ‘z’ 映射到 ‘A’ 到 ‘Z’,但是非 ASCII 字母不变。
要就地将值大写,请使用 make_ascii_uppercase()
。
要除非 ASCII 字符外还使用大写 ASCII 字符,请使用 to_uppercase()
。
Examples
let ascii = 'a'; let non_ascii = '❤'; assert_eq!('A', ascii.to_ascii_uppercase()); assert_eq!('❤', non_ascii.to_ascii_uppercase());Run
以等效的 ASCII 小写形式复制值。
ASCII 字母 ‘A’ 到 ‘Z’ 映射到 ‘a’ 到 ‘z’,但是非 ASCII 字母不变。
要就地小写该值,请使用 make_ascii_lowercase()
。
要除非 ASCII 字符外还使用小写 ASCII 字符,请使用 to_lowercase()
。
Examples
let ascii = 'A'; let non_ascii = '❤'; assert_eq!('a', ascii.to_ascii_lowercase()); assert_eq!('❤', non_ascii.to_ascii_lowercase());Run
将此类型就地转换为其 ASCII 大写等效项。
ASCII 字母 ‘a’ 到 ‘z’ 映射到 ‘A’ 到 ‘Z’,但是非 ASCII 字母不变。
要返回新的大写值而不修改现有值,请使用 to_ascii_uppercase()
。
Examples
let mut ascii = 'a'; ascii.make_ascii_uppercase(); assert_eq!('A', ascii);Run
将此类型就地转换为其 ASCII 小写等效项。
ASCII 字母 ‘A’ 到 ‘Z’ 映射到 ‘a’ 到 ‘z’,但是非 ASCII 字母不变。
要返回新的小写值而不修改现有值,请使用 to_ascii_lowercase()
。
Examples
let mut ascii = 'A'; ascii.make_ascii_lowercase(); assert_eq!('a', ascii);Run
检查值是否为 ASCII 字母字符:
- U+0041 ‘A’ ..= U+005A ‘Z’,或
- U+0061 ‘a’ ..= U+007A ‘z’。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(uppercase_a.is_ascii_alphabetic()); assert!(uppercase_g.is_ascii_alphabetic()); assert!(a.is_ascii_alphabetic()); assert!(g.is_ascii_alphabetic()); assert!(!zero.is_ascii_alphabetic()); assert!(!percent.is_ascii_alphabetic()); assert!(!space.is_ascii_alphabetic()); assert!(!lf.is_ascii_alphabetic()); assert!(!esc.is_ascii_alphabetic());Run
检查值是否为 ASCII 大写字符: U+0041 ‘A’ ..= U+005A ‘Z’。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(uppercase_a.is_ascii_uppercase()); assert!(uppercase_g.is_ascii_uppercase()); assert!(!a.is_ascii_uppercase()); assert!(!g.is_ascii_uppercase()); assert!(!zero.is_ascii_uppercase()); assert!(!percent.is_ascii_uppercase()); assert!(!space.is_ascii_uppercase()); assert!(!lf.is_ascii_uppercase()); assert!(!esc.is_ascii_uppercase());Run
检查值是否为 ASCII 小写字符: U+0061 ‘a’ ..= U+007A ‘z’。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(!uppercase_a.is_ascii_lowercase()); assert!(!uppercase_g.is_ascii_lowercase()); assert!(a.is_ascii_lowercase()); assert!(g.is_ascii_lowercase()); assert!(!zero.is_ascii_lowercase()); assert!(!percent.is_ascii_lowercase()); assert!(!space.is_ascii_lowercase()); assert!(!lf.is_ascii_lowercase()); assert!(!esc.is_ascii_lowercase());Run
检查值是否为 ASCII 字母数字字符:
- U+0041 ‘A’ ..= U+005A ‘Z’,或
- U+0061 ‘a’ ..= U+007A ‘z’,或
- U+0030 ‘0’ ..= U+0039 ‘9’。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(uppercase_a.is_ascii_alphanumeric()); assert!(uppercase_g.is_ascii_alphanumeric()); assert!(a.is_ascii_alphanumeric()); assert!(g.is_ascii_alphanumeric()); assert!(zero.is_ascii_alphanumeric()); assert!(!percent.is_ascii_alphanumeric()); assert!(!space.is_ascii_alphanumeric()); assert!(!lf.is_ascii_alphanumeric()); assert!(!esc.is_ascii_alphanumeric());Run
检查值是否为 ASCII 十进制数字: U+0030 ‘0’ ..= U+0039 ‘9’。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(!uppercase_a.is_ascii_digit()); assert!(!uppercase_g.is_ascii_digit()); assert!(!a.is_ascii_digit()); assert!(!g.is_ascii_digit()); assert!(zero.is_ascii_digit()); assert!(!percent.is_ascii_digit()); assert!(!space.is_ascii_digit()); assert!(!lf.is_ascii_digit()); assert!(!esc.is_ascii_digit());Run
检查值是否为 ASCII 十六进制数字:
- U+0030 ‘0’ ..= U+0039 ‘9’,或
- U+0041 ‘A’ ..= U+0046 ‘F’,或
- U+0061 ‘a’ ..= U+0066 ‘f’。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(uppercase_a.is_ascii_hexdigit()); assert!(!uppercase_g.is_ascii_hexdigit()); assert!(a.is_ascii_hexdigit()); assert!(!g.is_ascii_hexdigit()); assert!(zero.is_ascii_hexdigit()); assert!(!percent.is_ascii_hexdigit()); assert!(!space.is_ascii_hexdigit()); assert!(!lf.is_ascii_hexdigit()); assert!(!esc.is_ascii_hexdigit());Run
检查值是否为 ASCII 标点符号:
- U+0021 ..= U+002F
! " # $ % & ' ( ) * + , - . /
,或 - U+003A ..= U+0040
: ; < = > ? @
,或 - U+005B ..= U+0060`[] ^ _```,或
- U+007B ..= U+007E
{ | } ~
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(!uppercase_a.is_ascii_punctuation()); assert!(!uppercase_g.is_ascii_punctuation()); assert!(!a.is_ascii_punctuation()); assert!(!g.is_ascii_punctuation()); assert!(!zero.is_ascii_punctuation()); assert!(percent.is_ascii_punctuation()); assert!(!space.is_ascii_punctuation()); assert!(!lf.is_ascii_punctuation()); assert!(!esc.is_ascii_punctuation());Run
检查值是否为 ASCII 图形字符: U+0021 ‘!’ ..= U+007E ‘~’。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(uppercase_a.is_ascii_graphic()); assert!(uppercase_g.is_ascii_graphic()); assert!(a.is_ascii_graphic()); assert!(g.is_ascii_graphic()); assert!(zero.is_ascii_graphic()); assert!(percent.is_ascii_graphic()); assert!(!space.is_ascii_graphic()); assert!(!lf.is_ascii_graphic()); assert!(!esc.is_ascii_graphic());Run
检查值是否为 ASCII 空格字符: U+0020 空格,U+0009 水平制表符,U+000A 行进纸,U+000C 表格进纸或 U+000D 回车。
Rust 使用 WhatWG 基础标准的 ASCII 空格的定义。还有其他几种广泛使用的定义。 例如,POSIX 语言环境 包括 U+000B 垂直标签以及所有上述字符,但是 - 从相同的规格来看 -Bourne shell 中 “field splitting” 的默认规则 仅考虑空格,水平标签和 LINE FEED 作为空白。
如果要编写将处理现有文件格式的程序,请在使用此函数之前检查该格式的空格定义。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(!uppercase_a.is_ascii_whitespace()); assert!(!uppercase_g.is_ascii_whitespace()); assert!(!a.is_ascii_whitespace()); assert!(!g.is_ascii_whitespace()); assert!(!zero.is_ascii_whitespace()); assert!(!percent.is_ascii_whitespace()); assert!(space.is_ascii_whitespace()); assert!(lf.is_ascii_whitespace()); assert!(!esc.is_ascii_whitespace());Run
检查值是否为 ASCII 控制字符: U+0000 NUL ..= U+001F 单元分隔符,或 U+007F DELETE。 请注意,大多数 ASCII 空格字符是控制字符,而 SPACE 不是。
Examples
let uppercase_a = 'A'; let uppercase_g = 'G'; let a = 'a'; let g = 'g'; let zero = '0'; let percent = '%'; let space = ' '; let lf = '\n'; let esc: char = 0x1b_u8.into(); assert!(!uppercase_a.is_ascii_control()); assert!(!uppercase_g.is_ascii_control()); assert!(!a.is_ascii_control()); assert!(!g.is_ascii_control()); assert!(!zero.is_ascii_control()); assert!(!percent.is_ascii_control()); assert!(!space.is_ascii_control()); assert!(lf.is_ascii_control()); assert!(esc.is_ascii_control());Run
Trait Implementations
将 0x00..=0xFF 中的字节映射到 char
,该 char
的代码点具有相同的值,即 U+0000..=U+00FF。
Unicode 的设计使其可以使用 IANA 称为 ISO-8859-1 的字符编码有效地解码字节。 此编码与 ASCII 兼容。
请注意,这与 ISO/IEC 8859-1 又名不同 ISO 8859-1 (连字符少一个),它留下了一些 “blanks” 字节值,这些值未分配给任何字符。 ISO-8859-1 (属于 IANA) 将它们分配给 C0 和 C1 控制代码。
请注意,这也与 Windows-1252 也不同 代码页 1252,它是 ISO/IEC 8859-1 的超集,它为标点符号和各种拉丁字符分配了一些 (不是全部) 空格。
为了进一步混淆,在 Web 上 ascii
,iso-8859-1
和 windows-1252
都是 Windows-1252 超集的别名,该超集用相应的 C0 和 C1 控制代码填充了其余的空白。
如果存在,则此方法返回 self
和 other
值之间的顺序。 Read more
type Searcher = CharSearcher<'a>
type Searcher = CharSearcher<'a>
🔬 This is a nightly-only experimental API. (pattern
#27721)
API not fully fleshed out and ready to be stabilized
此模式的关联搜索者
🔬 This is a nightly-only experimental API. (pattern
#27721)
API not fully fleshed out and ready to be stabilized
从 self
和 haystack
构造关联的搜索器以进行搜索。 Read more
🔬 This is a nightly-only experimental API. (pattern
#27721)
API not fully fleshed out and ready to be stabilized
检查模式是否与 haystack 中的任何位置匹配
🔬 This is a nightly-only experimental API. (pattern
#27721)
API not fully fleshed out and ready to be stabilized
检查模式是否在 haystack 的前面匹配
🔬 This is a nightly-only experimental API. (pattern
#27721)
API not fully fleshed out and ready to be stabilized
如果匹配,则从 haystack 的正面删除模式。
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
[src]
pub fn is_suffix_of(self, haystack: &'a str) -> bool where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
[src]🔬 This is a nightly-only experimental API. (pattern
#27721)
API not fully fleshed out and ready to be stabilized
检查模式是否与 haystack 的后面匹配
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
[src]
pub fn strip_suffix_of(self, haystack: &'a str) -> Option<&'a str> where
<char as Pattern<'a>>::Searcher: ReverseSearcher<'a>,
[src]🔬 This is a nightly-only experimental API. (pattern
#27721)
API not fully fleshed out and ready to be stabilized
如果匹配,则从 haystack 的后面删除模式。
🔬 This is a nightly-only experimental API. (step_trait
#42168)
recently redesigned
返回从 start
到 end
所需的 successor 步骤的数量。 Read more
🔬 This is a nightly-only experimental API. (step_trait
#42168)
recently redesigned
返回通过将 self
count
的 successor 而获得的值。 Read more
🔬 This is a nightly-only experimental API. (step_trait
#42168)
recently redesigned
返回通过获取 self count
次的 predecessor 而获得的值。 Read more
🔬 This is a nightly-only experimental API. (step_trait
#42168)
recently redesigned
返回通过将 self
count
的 successor 而获得的值。 Read more
🔬 This is a nightly-only experimental API. (step_trait
#42168)
recently redesigned
返回通过获取 self count
次的 predecessor 而获得的值。 Read more