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

警告

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

提示

更新时间:2016年01月09日。

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

通常情况下,英文数字占用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# 计算字符串在控制台中的显示长度 由 勤奋的小孩 创作,采用 知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 http://space.cnblogs.com/msg/send/qin-nz 处获得。

C# 计算字符串在控制台中的显示长度的更多相关文章

  1. 一些特殊ACII码的用法 在控制台中覆盖显示、刷新显示和删除字符

    很好奇怎么实现在控制台中不换行直接显示新的信息把旧的替换掉,于是找到了两个ACII码字符,他们可以帮助实现. 一个是‘\b’字符,这个字符是backspace,即删除上一个字符,于是可以清除以显示的旧 ...

  2. 在idea的控制台中中文显示为乱码

    显示乱码的原因不一定相同 我目前解决方法: -Dfile.encoding=UTF-8

  3. .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

    目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...

  4. Java初学者作业——编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天. 实现思路: (1)声明变量 year.month和 date,用于存储日期中的年.月.日 ...

  5. 利用跨域请求来隐藏firbug控制台中的Ajax请求

    本文链接:http://www.orlion.ml/63/ 普通jquery的Ajax请求在控制台中是可见的,如下: 而在利用jsonp(json with padding)进行Ajax跨域时,发现A ...

  6. 关于UIFont和计算字符串的高度和宽度

    转自:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.创建方法:+ fontWithName:size:- fontWithSize:2.创建系统字体:+ sy ...

  7. Chrome 开发者控制台中,你可能意想不到的功能

    Chrome 有内置的开发者工具.它拥有丰富的特性,比如元素(Elements).网络(Network)和安全(Security).今天,我们主要关注一下 JavaScript 控制台. 当我最初写代 ...

  8. Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue

    一,引言 上一篇讲到关于 Azure ServiceBus 的一些概念,讲到 Azure Service Bus(服务总线),其实也叫 "云消息服务",是微软在Azure 上提供的 ...

  9. js中控制小数点的显示位数的技术整理

    js中自带方法控制小数点的显示位数(四舍五入) alert((12.9299).toFixed(2)); //12.93 alert((12.9243).toFixed(2)); //12.92 小数 ...

随机推荐

  1. zTree入门-最简单的树

    最近发现项目中很多地方都是树形菜单,而这些树形菜单都是使用树形插件zTree来制作的,所以就想自学一下zTree,参照官方文档写了一个简单的案例,使用zTree做了 一个最简单的树形结构. 案例:zT ...

  2. php基础上

    建立站点 localhost /文件     www目录下  不能放 中文目录 php 支持的数据类型  int 整数  float  小数  string  字符 bool 布尔型 date  时间 ...

  3. (转)UIWebView全部API学习

    网上找的收藏一下 http://www.myexception.cn/web/1888974.html 最生僻的API做了下划线以及粗体的标注.百度上查了全是拷贝的同一份代码,而且只有代码没有解释,很 ...

  4. struts2的国际化文件在jsp中的引用

    struts.xml中的配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  5. JavaScript中的事件

    1.冒泡事件:事件按照特定的的事件目标到最不特定的事件目标顺序触发(它是按照DOM的层次节后依次做出的反应) 2.捕获事件:事件从不确定的对象document 开始触发然后到最精确(也可以在窗口级别捕 ...

  6. scrollview背景头部拉伸

    a - (void)viewDidLoad { [super viewDidLoad]; self.tableView.contentInset = UIEdgeInsetsMake(kImageOr ...

  7. 调用JavaScript

    当webdriver 遇到没法完成的操作时,笔者可以考虑借用JavaScript 来完成,比下下面的例子,通过JavaScript 来隐藏页面上的元素.除了完成webdriver 无法完成的操作,如果 ...

  8. NPOI 2.0版本的使用

    详细教程: http://blog.csdn.net/xxs77ch/article/details/50216033 using System; using System.Collections.G ...

  9. ImageUtil(验证码数据生成工具类)

    登录界面时,常常会使用到验证码图片生成,程序如下: package util; import java.awt.Color; import java.awt.Font; import java.awt ...

  10. 【经验】ansible 批量推送公钥

    1.使用 ssh-keygen -t rsa生成密钥对 ssh-keygen -t rsa 2.推送单个公钥到远程机器 格式: ssh-copy-id -i ~/.ssh/id_rsa.pub use ...