欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# String扩展 让你在PadLeft和PadRight时不再受单双字节问题困扰

程序员文章站 2023-10-31 09:51:52
c# 中 padleft ,padright的用法简单来说就是给字符串实现补位。如:string.padleft(5,'0'); 表示检查字符串长度是否少于5位,若少于5位,则自动在其左侧以'0'补足...

c# 中 padleft ,padright的用法

简单来说就是给字符串实现补位。

如:string.padleft(5,'0'); 表示检查字符串长度是否少于5位,若少于5位,则自动在其左侧以'0'补足。

同理padright是在右侧实现补位。

补位

string str = "10";

str.padleft(5,'0')

输出:00010

str.padright(5, '0')

输出:10000

因为在net中,string的length并不区分当前字符串包含的字符为单字节还是双字节字符,这样导致我们在通过字符串的padleft和padright方法处理一些需要排版显示的字符串时,会使得相关显示参差不齐,所以这里就有了这么一个扩展,让双字节显示占用的两个单字节宽度“吐”出来,下面是具体代码

  using system.text.regularexpressions;
  public static class stringextensions
  {
    /// <summary>
    /// 按单字节字符串向左填充长度
    /// </summary>
    /// <param name="input"></param>
    /// <param name="length"></param>
    /// <param name="paddingchar"></param>
    /// <returns></returns>
    public static string padleftwhiledouble(this string input, int length, char paddingchar = '\0')
    {
      var singlelength = getsinglelength(input);
      return input.padleft(length - singlelength + input.length, paddingchar); 
    }
    private static int getsinglelength(string input)
    {
      if (string.isnullorempty(input))
      {
        throw new argumentnullexception();
      }
      return regex.replace(input, @"[^\x00-\xff]", "aa").length;//计算得到该字符串对应单字节字符串的长度
    }
    /// <summary>
    /// 按单字节字符串向右填充长度
    /// </summary>
    /// <param name="input"></param>
    /// <param name="length"></param>
    /// <param name="paddingchar"></param>
    /// <returns></returns>
    public static string padrightwhiledouble(this string input, int length, char paddingchar = '\0')
    {
      var singlelength = getsinglelength(input);
      return input.padright(length - singlelength + input.length, paddingchar);
    }
  }

测试代码如下

      console.writeline("123测试测试".padrightwhiledouble(25) + "1");
      console.writeline("123测试测试".padrightwhiledouble(25, 'a') + "1");
      console.writeline("1231212".padrightwhiledouble(25) + "1");
      console.writeline("1231212".padrightwhiledouble(25, 'a') + "1");
      console.writeline("123测试测试".padleftwhiledouble(25) + "1");
      console.writeline("123测试测试".padleftwhiledouble(25, 'a') + "1");
      console.writeline("1231212".padleftwhiledouble(25) + "1");
      console.writeline("1231212".padleftwhiledouble(25, 'a') + "1");

测试效果图

c# String扩展 让你在PadLeft和PadRight时不再受单双字节问题困扰

下面是正常的用法

c# 中 padleft和padright 的用法

在 c# 中可以对字符串使用 padleft 和 padright 进行轻松地补位。
padleft(int totalwidth, char paddingchar) //在字符串左边用 paddingchar 补足 totalwidth 长度
padright(int totalwidth, char paddingchar) //在字符串右边用 paddingchar 补足 totalwidth 长度

示例:

1.假如想输出aaaaa,可以用string.empty.padleft(5,'a');
2.假如想输出:

*
**
***
****

可以用padleft实现:

for(int i=1;i<=4;i++)
{
 console.writeline(string.empty.padleft(i,'*'));
}

以上就是c# string扩展 让你在padleft和padright时不再受单双字节问题困扰的详细内容,更多关于c# padleft和padright的资料请关注其它相关文章!