首页 新闻 会员 周边

字符串不够位数补齐的问题。

-1
悬赏园豆:10 [已解决问题] 解决于 2017-03-16 13:47

code:

        public string RunningHistoryValue(DataRow temp)
        {
            if (temp == null) return null;        
            string[] strValue = { temp["BANK_NAME"].ToString(), temp["bank_provice"].ToString(), temp["CUSTOMER_NAME"].ToString() };
            var orderByArr = strValue.OrderBy(x => x.Length).ToArray();//字符串排序
            var maxLeng = Encoding.Default.GetBytes(orderByArr[orderByArr.Length - 1].ToCharArray()).Length;//最大值长度 取字节
            
            var sb = new StringBuilder();
            sb.AppendFormat("开户行:{0}", CompareString(strValue[0], maxLeng));
            sb.AppendFormat("支户名:{0}", temp["BANK_SUBNAME"]);
            sb.Append(Environment.NewLine);

            sb.AppendFormat("归属省:{0}", CompareString(strValue[1], maxLeng));
            sb.AppendFormat("归属市:{0}", temp["bank_city"]);
            sb.Append(Environment.NewLine);

            sb.AppendFormat("用  户:{0}", CompareString(strValue[2], maxLeng));
            sb.AppendFormat("账  号:{0}", temp["BANK_ACCOUNT"]);
            return sb.ToString();
        }

        /// <summary>
        /// 字符串比较大小 不够位数右边补充空格
        /// </summary>
        /// <param name="value"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public string CompareString(string value,int length)
        {
            if ((value + "").Length == 0) return null;
            if (Encoding.Default.GetBytes(value.ToCharArray()).Length >= length) return value;
            string tempValue = value.PadRight(length, ' ');
            return tempValue;
        }

问题出现在 CompareString 

string tempValue = value.PadRight(length, ' '); 这个补齐length 比较的其实是字节数 这个是直接length

后面想了下改成这样 ok了
复制代码
        /// <summary>
        /// 字符串比较大小 不够位数右边补充空格
        /// </summary>
        /// <param name="value"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public string CompareString(string value,int length)
        {
            if ((value + "").Length == 0) return null;
            var byteLength = Encoding.Default.GetBytes(value.ToCharArray()).Length;
            if (byteLength >= length) return value;
            var qsLength = length - byteLength;
            string tempValue = value;
            string kong = "";
            for (int i = 0; i < qsLength; i++)
            {
                kong = kong + " ";
            }
            return tempValue+kong;
        }
复制代码

结果达到了 不知道有其他的好一点的写法没?

 
s_p的主页 s_p | 初学一级 | 园豆:138
提问于:2017-03-16 10:23
< >
分享
最佳答案
0

啊..你为什么要按字节来补齐...你这写法要是编码方式变了了.再不济你把编码方式改成unico不就是一样的效果了.

收获园豆:8
吴瑞祥 | 高人七级 |园豆:29449 | 2017-03-16 12:06
其他回答(1)
0

字符串有 PadLeft 和 PadRight 可以自动补充功能。

你查查~~~

收获园豆:2
pengbg | 园豆:13 (初学一级) | 2017-03-16 11:02

上面已经有写string tempValue = value.PadRight(length, ' '); 这个是有问题的 不是按字节的长度 来补齐了 。也看仔细点 啊 园友

支持(0) 反对(0) s_p | 园豆:138 (初学一级) | 2017-03-16 11:46

最后那个方法 已经解决 了 

支持(0) 反对(0) s_p | 园豆:138 (初学一级) | 2017-03-16 11:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册