首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测量包含宽字符的字符串的长度

测量包含宽字符的字符串的长度
EN

Stack Overflow用户
提问于 2013-01-02 08:13:22
回答 1查看 1.5K关注 0票数 7

我有以下字符串:

代码语言:javascript
复制
友又

相应的UTF-16表示(小端)是

代码语言:javascript
复制
CB 53 40 D8 87 DC C8 53
\___/ \_________/ \___/
  友              又

"友又".Length返回4,因为字符串由CLR存储为4个2字节的字符。

我如何测量我的弦的长度?如何将其拆分成{ "友", "", "又" }

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-02 08:18:11

作为documented

Length属性返回此实例中的Char对象数,而不是Unicode字符数。原因是一个Unicode字符可能由多个Char表示。使用System.Globalization.StringInfo类处理每个Unicode字符,而不是每个字符。

获取长度:

代码语言:javascript
复制
new System.Globalization.StringInfo("友又").LengthInTextElements

获取每个Unicode字符是documented here,但是创建一个扩展方法要方便得多:

代码语言:javascript
复制
public static IEnumerable<string> TextElements(this string s) {
    var en = System.Globalization.StringInfo.GetTextElementEnumerator(s);

    while (en.MoveNext())
    {
        yield return en.GetTextElement();
    }
}

并在foreach或LINQ语句中使用它:

代码语言:javascript
复制
foreach (string segment in "友又".TextElements())
{
    Console.WriteLine(segment);
}

它也可以用于长度:

代码语言:javascript
复制
Console.WriteLine("友又".TextElements().Count());
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14115503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档