C#语言之“中英文混合字符串对齐”的方法

参考自:(1)http://www.cnblogs.com/cnluoke/articles/1213398.html

(2)http://www.cnblogs.com/sql4me/archive/2009/11/16/1603996.html

方法一:将已有字符串组织成新字符串时填充

由于某一个字段,包含有汉字和数字。而一个汉字是两位占位符的大小,如果单从字符串长度来看,一个汉字的长度为1。假如按一个包含汉字字符串长度就等于占位符大小(如果只包含字母和数字的字符串这样计算是对的)来计算的话,一个汉字却等于一个占位(显然是错误的),这样就会出现问题了,字段就无法对齐了。因为对齐是以占位大小为标准的。

比如:name字段,string name="中国人123";   那么name.length=6。如果以 Encoding.GetEncoding("gb2312").GetBytes(name).Length=9。假设name字段规定大小为12,不足字符串的可用空格来填充。填充Name字段的长度为12,这时就需要增加3个空格来充满这个字段,而不是6个空格。

解决办法:string name=name+new  string(‘ ‘,12-Encoding.GetEncoding("gb2312").GetBytes(name).Length);

==============================================================

方法二:扩展String.PadLeft和String.PadRight

private string PadLeftEx(string str,int totalByteCount,char c)
{
            Encoding coding = Encoding.GetEncoding("gb2312");
            int dcount = 0;
            foreach (char ch in str.ToCharArray())
            {
                if (coding.GetByteCount(ch.ToString()) == 2)
                    dcount++;
            }
            string w = str.PadRight(totalByteCount - dcount,c);
            return w;
}

private string PadRightEx(string str,int totalByteCount,char c)
{
            Encoding coding = Encoding.GetEncoding("gb2312");
            int dcount = 0;
            foreach (char ch in str.ToCharArray())
            {
                if (coding.GetByteCount(ch.ToString()) == 2)
                    dcount++;
            }
            string w = str.PadRight(totalByteCount - dcount,c);
            return w;
}

时间: 2024-08-29 16:28:25

C#语言之“中英文混合字符串对齐”的方法的相关文章

C#实现中英文混合字符串截取的方法

本文实例讲述了C#实现中英文混合字符串截取的方法,是C#字符串操作中非常常用的一个方法.分享给大家供大家参考之用.具体方法如下: 具体功能代码如下: /// <summary> /// 截取中英文混合字符串 /// </summary> /// <param name="text">字符文本</param> /// <param name="length">截取长度</param> /// &l

ASP如何计算中英文混合字符串长度和截取字符串

用ASP做网站的时候经常会碰到要截取字符串的情况.ASP中的Len函数不管是中文字符,还是英文字符,统统按一个单位来计算,由于一个中文字符的宽度是一个英文字符宽度的两倍,在中英文混合的情况下字符串实际占用的宽度就不好计算了,如果按照Len函数计算的长度来截取字符串截出来的效果也会长短不一,下面是按照一个汉字相当于两个英文字符来计算字符串长度和截取字符串的代码 计算中英文混合字符串的长度: [vb] view plaincopyprint? function getStringLen(str) o

c#的中英文混合字符串截取

public class StringHelper     {         public static string GetSubString(string str, int len)         {             string result = string.Empty;// 最终返回的结果             int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度          

中英文混合字符串长度

得到中英文混合字符串长度 方法1 - (int)convertToInt:(NSString*)strtemp { int strlength = 0; char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding]; for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) { if (*p) { p++;

PHP获取中英文混合字符串的字数

function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLen=0; $ascLen=strlen($str); $ind=0; $hasCC=ereg("[xA1-xFE]",$str); #判断是否有汉字 $hasAsc=ereg("[x01-xA0]",$str); #判断是否有ASCII字符 if($hasCC && !$hasAsc) #只有汉字的情况 return strlen($str)/2; if(!$

中英文混合字符串截取java

//截取字符串长度(中文2个字节,半个中文显示一个) public String subTextString(String str,int len){ if(str.length()<len/2)return str; int count = 0; StringBuffer sb = new StringBuffer(); String[] ss = str.split(""); for(int i=1;i<ss.length;i++){ count+=ss[i].getB

求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码

/// <summary> /// 求字符串的实际长度(汉字2个字节,外语字符1个字节) /// </summary> /// <param name="str"></param> /// <returns></returns> public static int Length(string str) { int len = 0; char[] arr = str.ToCharArray(); for (int i

JAVASCRIPT 验证计算中英文混合字符串长度的解决

方法一:采用escape函数 折叠展开javascript 代码复制内容到剪贴板 function cnLength(Str) { var escStr = escape(Str); var numI = 0; var escStrlen = escStr.length; for (i = 0; i < escStrlen; i++) if (escStr.charAt(i) == '%') if (escStr.charAt(++i) == 'u') numI++; return Str.le

C#截取中英文混合字符串分行显示

private int GetStrByteLength(string str) { return System.Text.Encoding.Default.GetByteCount(str); } private string SubStrLenth(string str, int startIndex, int length) { int strlen = GetStrByteLength(str); if (startIndex + 1 > strlen) { return "&qu