我有以下字符串:
友又
相应的UTF-16表示(小端)为:
CB 53 40 D8 87 DC C8 53
\___/ \_________/ \___/
友 又
"友又".Length
返回4,因为CLR将字符串存储为4个2字节字符。
如何测量字符串的长度?如何将其拆分为{"友", "", "又"}
?
我有以下字符串:
友又
CB 53 40 D8 87 DC C8 53
\___/ \_________/ \___/
友 又
"友又".Length
返回4,因为CLR将字符串存储为4个2字节字符。
如何测量字符串的长度?如何将其拆分为{"友", "", "又"}
?
如文档所述:
Length
属性返回此实例中Char
对象的数量,而不是 Unicode 字符的数量。这是因为一个 Unicode 字符可能由多个Char
表示。使用System.Globalization.StringInfo
类来处理每个 Unicode 字符,而不是每个 Char。
获取长度:
new System.Globalization.StringInfo("友又").LengthInTextElements
获取每个Unicode字符的方法在此处记录,但是使用扩展方法将更加方便:
public static IEnumerable<string> TextElements(this string s) {
var en = System.Globalization.StringInfo.GetTextElementEnumerator(s);
while (en.MoveNext())
{
yield return en.GetTextElement();
}
}
可以在 foreach
循环或 LINQ 语句中使用它:
foreach (string segment in "友又".TextElements())
{
Console.WriteLine(segment);
}
这也可以用于长度:
Console.WriteLine("友又".TextElements().Count());
GetTextElementEnumerator
来分割字符串吗? - Clément