在 C# 中的字符串的开头和结尾嵌入空字符 (\u0000)
Embedded null char(\u0000) at the beginning and end of a String in C#
我有这段代码,我使用当前文化和序数字符串比较类型输出以下四个字符。
string str4 = "one two three";
Console.WriteLine(str4.IndexOf('\u0000', StringComparison.CurrentCulture));
Console.WriteLine(str4.IndexOf('o', StringComparison.CurrentCulture));
Console.WriteLine(str4.LastIndexOf("\u0000", StringComparison.CurrentCulture));
Console.WriteLine(str4.LastIndexOf("e", StringComparison.CurrentCulture));
Console.WriteLine();
Console.WriteLine(str4.IndexOf('\u0000', StringComparison.Ordinal));
Console.WriteLine(str4.IndexOf('o', StringComparison.Ordinal));
Console.WriteLine(str4.LastIndexOf("\u0000", StringComparison.Ordinal));
Console.WriteLine(str4.LastIndexOf("e", StringComparison.Ordinal));
从输出中我可以看到该字符串在位置 0 处有一个嵌入的空字符和一个 'o'
位置 0 的 char 以及使用当前文化,这怎么可能?
然后在位置 13(但字符串只有 12 个位置(0 到 12))使用当前文化有一个嵌入的空字符,这是如何工作的?
然后当我使用 Ordinal
输出显示在字符串的开头或结尾没有嵌入空字符作为方法 returns -1。
这是否意味着当前区域性会看到嵌入的空字符而序数不会?
当前输出如下:
0
0
13
12
-1
0
-1
12
来自 IndexOf 的文档:
”字符集包括可忽略的字符,这些字符是在执行语言或 culture-sensitive 比较时不考虑的字符。在 culture-sensitive 搜索中(即,如果 comparisonType 不是 Ordinal 或 OrdinalIgnoreCase ), 如果 value 包含一个可忽略的字符,则结果等同于删除该字符进行搜索。如果 value 仅包含一个或多个可忽略的字符,则 IndexOf(String, Int32, Int32, StringComparison) 方法始终 returns startIndex , 这是搜索开始的字符位置。"
零必须是可忽略的字符,因此返回 startIndex。
我有这段代码,我使用当前文化和序数字符串比较类型输出以下四个字符。
string str4 = "one two three";
Console.WriteLine(str4.IndexOf('\u0000', StringComparison.CurrentCulture));
Console.WriteLine(str4.IndexOf('o', StringComparison.CurrentCulture));
Console.WriteLine(str4.LastIndexOf("\u0000", StringComparison.CurrentCulture));
Console.WriteLine(str4.LastIndexOf("e", StringComparison.CurrentCulture));
Console.WriteLine();
Console.WriteLine(str4.IndexOf('\u0000', StringComparison.Ordinal));
Console.WriteLine(str4.IndexOf('o', StringComparison.Ordinal));
Console.WriteLine(str4.LastIndexOf("\u0000", StringComparison.Ordinal));
Console.WriteLine(str4.LastIndexOf("e", StringComparison.Ordinal));
从输出中我可以看到该字符串在位置 0 处有一个嵌入的空字符和一个 'o' 位置 0 的 char 以及使用当前文化,这怎么可能?
然后在位置 13(但字符串只有 12 个位置(0 到 12))使用当前文化有一个嵌入的空字符,这是如何工作的?
然后当我使用 Ordinal
输出显示在字符串的开头或结尾没有嵌入空字符作为方法 returns -1。
这是否意味着当前区域性会看到嵌入的空字符而序数不会?
当前输出如下:
0
0
13
12
-1
0
-1
12
来自 IndexOf 的文档:
”字符集包括可忽略的字符,这些字符是在执行语言或 culture-sensitive 比较时不考虑的字符。在 culture-sensitive 搜索中(即,如果 comparisonType 不是 Ordinal 或 OrdinalIgnoreCase ), 如果 value 包含一个可忽略的字符,则结果等同于删除该字符进行搜索。如果 value 仅包含一个或多个可忽略的字符,则 IndexOf(String, Int32, Int32, StringComparison) 方法始终 returns startIndex , 这是搜索开始的字符位置。"
零必须是可忽略的字符,因此返回 startIndex。