zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    C++ 的那些坑 (Day 0)
    LeetCode Search a 2D Matrix II
    最大子序列和问题的解(共4种,层层推进)
    如何编译文件(gcc + nasm)
    os如何处理键盘的所有按键,显示or不显示,显示是如何显示
    汇编操作显存
    diy文件系统上创建文件的流程
    在diy的文件系统上创建文件的流程
    建立文件系统
    快速选择
  • 原文地址:https://www.cnblogs.com/sunzhongzheng/p/4064730.html
Copyright © 2011-2022 走看看