码迷,mamicode.com
首页 > Windows程序 > 详细

C# 计算字符串在控制台中的显示长度

时间:2016-01-09 20:01:28      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:

C# 计算字符串在控制台中的显示长度?

警告

您当前查看的页面是未经授权的转载!
如果当前版本排版错误,请前往查看最新版本:http://www.cnblogs.com/qin-nz/p/csharp-calculate-string-display-length.html

提示

更新时间:2016年01月09日.
作品勤奋的小孩创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接( http://www.cnblogs.com/qin-nz/p/csharp-calculate-string-display-length.html )。
如您有任何疑问或者授权方面的协商,请给我留言

如果你在写控制台应用,有的时候需要输出中英文,同时还要保证文字能够对齐。 这个时候,就需要计算一个字符串需要占用几个长度的字符。

通常情况下,英文数字占用1个单位宽度,而汉字需要2个单位宽度。 接下来的任务就是怎么判断某个字符是中文还是英文了。

不考虑制表符的情况?

考虑不同的字符集,对于存储所需要的Byte数量的不同,不难发现 GBK 字符集中,中文需要两个字节,英文需要一个字节。 因此可以使用下面的代码来求出字符所占的显示长度。

System.Text.Encoding.GetEncoding("GBK").GetByteCount(str);

考虑制表符的情况?

如果我们的字符串中包含 ‘\t‘ ,这时候就要单独处理了,制表符产生的显示长度取决于之前的字符串显示到哪里了。 下面的代码应该可以解决这个问题。

using System.Text;
public static class StringExtension
{
    public static int DisplayLength(this string str)
    {
        int lengthCount = 0;
        var splits = str.ToCharArray();
        for (int i = 0; i < splits.Length; i++)
        {
            if (splits[i] == '\t')
            {
                lengthCount += 8 - lengthCount % 8;
            }
            else
            {
                lengthCount += Encoding.GetEncoding("GBK").GetByteCount(splits[i].ToString());
            }
        }
        return lengthCount;
    }

C# 计算字符串在控制台中的显示长度

标签:

原文地址:http://www.cnblogs.com/qin-nz/p/5116988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!