C#中英文混合字符串对齐输出

此方法基于测量字符串渲染后的长度来补空格对齐,字体建议使用等宽字体.
这里写图片描述

using System;
using System.Drawing;

namespace Program
{
    class Program
    {
        static void Main(string[] args)
        {
            PadString ps = new PadString();
            Console.WriteLine($"{ps.PadRight("uid", 10)}{ps.PadRight("nickname", 40)}{"txt"}");
            Console.WriteLine($"{ps.PadRight("用户id", 10)}{ps.PadRight("名字", 40)}{"文本"}");
        }
    }
    class PadString
    {
        private Font Font;
        private Graphics Graphics;
        private StringFormat StringFormat;
        private float SpaceWidth;
        public string PadRight(string str, int totalWidth)
        {
            return str + new string(' ', PadSpaceCount(str, totalWidth));
        }
        public string PadLift(string str, int totalWidth)
        {
            return new string(' ', PadSpaceCount(str, totalWidth)) + str;
        }
        private float StringWidth(string str)
        {
            return Graphics.MeasureString(str, Font, int.MaxValue, StringFormat).Width;
        }
        private int PadSpaceCount(string str, int totalWidth)
        {
            double strWidth = Math.Round(StringWidth(str), 3);
            double strTotalWidth = Math.Round(SpaceWidth * totalWidth, 3);
            if ((totalWidth * SpaceWidth) <= strWidth)
            {
                return 0;
            }
            else
            {
                return (int)Math.Ceiling((strTotalWidth - strWidth) / SpaceWidth);
            }
        }
        private PadString() { }
        public PadString(string fontName = "黑体", int fontSize = 14)
        {
            Font = new Font(fontName, fontSize, FontStyle.Regular, GraphicsUnit.Pixel);
            Graphics = Graphics.FromHwnd(IntPtr.Zero);
            StringFormat = StringFormat.GenericTypographic;
            StringFormat.FormatFlags = StringFormatFlags.FitBlackBox |
                                       StringFormatFlags.LineLimit |
                                       StringFormatFlags.MeasureTrailingSpaces |
                                       StringFormatFlags.NoClip;
            SpaceWidth = StringWidth(" ");
        }
    }
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值