字符串所占的字节长度

/*
在C#中字符串"中国人民zgrm"的Length=8,即一个汉字只占一个长度;
但有时候为了格式化输出的需要,我们期望得到字符串所占的字节长度,即
一个汉字占两个长度,"中国人民zgrm"的长度应该为12(=4个汉字*2+4个英文字符).
以下两个函数就用于解决这个问题.
这是根据以前看到的一个JS函数改写的.见笑了.
*/
/// <summary>
  /// <table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:字符串的字节长度 </td></tr>
  /// <tr><td><b>创 建 人</b>:夏春涛 </td></tr>
  /// <tr><td><b>创建时间</b>:2005-07-16 </td></tr>
  /// </table>
  /// </summary>
  /// <param name="str">字符串</param>
  /// <returns>字符串的字节长度</returns>
  static public int TrueLength(string str)
  {
   int lenTotal = 0;
   int n = str.Length;
   string strWord = "";
   int asc;
   for(int i=0;i<n;i++)
   {
    strWord = str.Substring(i,1);    
    asc = Convert.ToChar(strWord);
    if ( asc < 0 || asc > 127 )
     lenTotal = lenTotal + 2;
    else
     lenTotal = lenTotal + 1;
   }

   return lenTotal;
  }
  /// <summary>
  /// <table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:填充或截断原始字符串为指定长度 </td></tr>
  /// <tr><td><b>创 建 人</b>:夏春涛 </td></tr>
  /// <tr><td><b>创建时间</b>:2005-07-16 </td></tr>
  /// </table>
  /// </summary>
  /// <param name="strOriginal">原始字符串</param>
  /// <param name="maxTrueLength">字符串的字节长度</param>
  /// <param name="chrPad">填充字符</param>
  /// <param name="blnCutTail">字符串的字节长度超过maxTrueLength时截断多余字符</param>
  /// <returns>填充或截断后的字符串</returns>
  static public string PadRightTrueLen(string strOriginal,int maxTrueLength,char chrPad,bool blnCutTail)
  {
   string strNew = strOriginal;
   
   if (strOriginal==null || maxTrueLength<=0)
   {
    strNew = "";
    return strNew;
   }

   int trueLen = TrueLength(strOriginal);
   if (trueLen>maxTrueLength)//超过maxTrueLength
   {
    if (blnCutTail)//截断
    {
     for(int i=strOriginal.Length-1; i>0; i--)
     {
      strNew = strNew.Substring(0,i);
      if (TrueLength(strNew) == maxTrueLength)
       break;
      else if (TrueLength(strNew) < maxTrueLength)
      {
       strNew += chrPad.ToString();
       break;
      }
     }
    }
   }
   else//填充
   {
    for(int i=0;i<maxTrueLength-trueLen;i++)
    {
     strNew += chrPad.ToString();
    }
   }

   return strNew;
  }

时间: 2024-10-14 21:47:22

字符串所占的字节长度的相关文章

Oracle截取字符串去掉字段末尾指定长度的字符_oracle

lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 eg: //去掉该字段后面15位字符串 select t.depre_name, substr(t.depre_name, 0, (length(t.depre_name) - 16)) from table t where t.del_flag = '0' [备注]一个汉字在Oracle数据库里占多少字节跟数据库的

Javascript 字符串字节长度计算函数代码与效率分析(for VS 正则)_正则表达式

先看看一下两段代码吧,它们分别用for循环和正则表达式来检测字符串的字节长度: for循环检测字符串的字节长度方法一: 复制代码 代码如下: var lenFor = function(str){ var byteLen=0,len=str.length; if(str){ for(var i=0; i<len; i++){ if(str.charCodeAt(i)>255){ byteLen += 2; } else{ byteLen++; } } return byteLen; } els

JS判断字符串字节长度(自动识别中英文)

你早晚会用到的,用CSS来控制文字长度毕竟不是什么需求都能满足,现在后台也不管字符长度截取了,只能用JS来截取字符串了.  代码如下 复制代码 /**  * 返回字符的字节长度(汉字算2个字节)  * @param {string}  * @returns {number}  */   var getByteLen = function (val) {     var len = 0;     for (var i = 0; i < val.length; i++) {         if (

Java按字节长度截取字符串

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个". public static String substring(String str, int toCount,String more) { int reInt = 0; String

用Java实现按字节长度截取字符串的方法

本文为原创,如需转载,请注明作者和出处,谢谢!   Web应用程序在浏览器中显示字符串时,由于显示长度的限制,常常需要将字符串截取后再进行显示.但目前很多流行的语言,如C#.Java内部采用的都是 Unicode 16(UCS2)编码,在这种编码中所有的字符都是两个字符,因此,如果要截取的字符串是中.英文.数字混合的,就会产生问题,如下面的字符串: String s = "a加b等于c,如果a等1.b等于2,那么c等3";   上面的字符串既有汉字,又有英文字符和数字.如果要截取前6个

Java中文字符所占的字节数

Java语言中,中文字符所占的字节数取决于字符的编码方式,一般情况下,采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节:采用GB2312或GBK编码方式时,一个中文字符占2个字节:而采用UTF-8编码方式时,一个中文字符会占3个字节.我们可以通过String类的getBytes(String charsetName)方法来获取到字符串以指定编码方式编码后所得到的字节数组,然后字节数组的长度就是该字符串在指定编码方式下所占的字节数.下面为一个测试示例: public s

按双字节长度来取String

/* * String.valueOf(arr[i]).matches("[\u4e00-\u9fa5]") 只是汉字 * String.valueOf(arr[i]).matches("[^x00-xff]") 双字节(包括汉字) */ public static String getStrBylength(String str , int len) { if(null == str) return ""; int sl = str.getBy

java中一个汉字和一个字母所占内存字节比较以及后台验证的减半处理

  基本概念 我们一般理解java中 一个字符char占2个字节byte 一个汉字占2个字节byte 一个字母占1个字节byte   其他情况 对于汉字来说,采用gbk编码占两字节,采用utf8编码占三个字节.   String的length()方法 String s1 = "aa"; String s2 = "a好"; s1.length() s2.length() 答案都是2,因为该方法是返回字符的个数,并不是内存中的字节数.   数据库应用 java的编码不会

visual c++6.0 结构体占存字节的疑问

问题描述 visual c++6.0 结构体占存字节的疑问 程序1: #include int main(void) { struct stu { double a; int b; }tex; printf("%d %d %d n", sizeof(stu), sizeof(tex.a), sizeof(tex.b) ); return 0; } 结果:16 8 4 //疑问:为什么 sizeof(stu) 不等于 sizeof(tex.a)和 sizeof(tex.b) 的和 12