C# 字符串特定格式的设置详解

        我们平时设置格式几乎都是通过string.format()实现的,但是.net框架只对基元类型(如int, double, long, char等数据类型)的格式进行了实现,所有的类和结构的格式都是通过默认的ToString()来实现,这时,如果我们想按照自身的意愿在控制台显示特定的输出就需要通过实现Iformattable借口来操作相应字符串的显示方式,下面是一个简单的Vector示例:

namespace chapter9
{
    class Program
    {
        static void Main(string[] args)
        {
            Vector v1 = new Vector(12,5,9);
            Vector v2 = new Vector(43.2, 54.2, 76.2);
            Console.WriteLine("In IJK format\n 1 is {0, 20:IJK}, 2 is {1, 20:IJK}", v1, v2);
            Console.WriteLine("In default  format\n 1 is {0, 20}, 2 is {1, 20}", v1, v2);
            Console.WriteLine("In VE format\n 1 is {0, 20:VE}, \n2 is {1, 20:VE}", v1, v2);
            Console.WriteLine("Norms are:\n  1 is {0, 20:N}, 2 is {1, 20:N}", v1, v2);
            Console.ReadLine();

        }
    }
    struct Vector : IFormattable  // 利用此接口设计Vector定制的输出格式
    {
        private double x, y, z;
        public Vector(double x, double y, double z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }
         
       public string ToString(string format, IFormatProvider formatProvider)
        {
            if (format == null)         //入口检查
                return ToString();  
            string formatUpper = format.ToUpper();   //统一字符串大小写
            switch (formatUpper)
            {
                case "N":
                    return "|| " + Norm().ToString() + " ||";
                case "VE":
                    return string.Format("({0:E}, {1:E}, {2:E})", x, y, z);
                case "IJK":

                   // StringBuilder相对于string,可以减小对内存的消耗,并提高效率,它常用于需要对字符串进行具体操作
                    StringBuilder sb = new StringBuilder(x.ToString(), 30);    // 参数1为X的字符串形式,参数2为该字符穿需占内存
                    sb.AppendFormat("i + ");
                    sb.AppendFormat(y.ToString());
                    sb.AppendFormat("j + ");
                    sb.AppendFormat(z.ToString());
                    sb.AppendFormat("k");
                    return sb.ToString();
                default:
                    return ToString();
            }
        }

      // 重载ToString(),保险起见
        public override string ToString()
        {
            return "(" + x + ", " + y + ", " + z + ")";
        }
        public double Norm()
        {
            return x * x + y * y + z * z;
        }
    }
}

tips:

   1,0009对应的格式代码 {0:0000}

   2.StringBuilder类的主要方法:Append(),AppendFormat(),Insert(),Remove(),Replace(),ToString()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值