7
我有以下字符串:測量包含的字符串的長度寬字符
友又
相應UTF-16表示(小端)是
CB 53 40 D8 87 DC C8 53
\___/ \_________/ \___/
友 又
"友又".Length
返回4,因爲字符串由CLR存儲爲4個2字節字符。
如何測量我的字符串的長度?我如何將它分成{ "友", "", "又" }
?
我有以下字符串:測量包含的字符串的長度寬字符
友又
相應UTF-16表示(小端)是
CB 53 40 D8 87 DC C8 53
\___/ \_________/ \___/
友 又
"友又".Length
返回4,因爲字符串由CLR存儲爲4個2字節字符。
如何測量我的字符串的長度?我如何將它分成{ "友", "", "又" }
?
由於documented:
的
Length
屬性返回Char
對象在這種情況下數量,而不是Unicode字符數。原因是一個Unicode字符可能由多個Char
表示。使用System.Globalization.StringInfo
類來處理每個Unicode字符而不是每個Char。
獲取長度:
new System.Globalization.StringInfo("友又").LengthInTextElements
獲取每一個Unicode字符documented here,但它更方便,使擴展方法:
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是的,你會[記錄](http://msdn.microsoft.com/en-us/library/x2f3k4f6.aspx)。 – GSerg
再次感謝您的幫助。 –