c# String扩展 让你在PadLeft和PadRight时不再受单双字节问题困扰
作者:娃都会打酱油了 时间:2022-09-06 12:11:54
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# 中 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,'*'));
}
来源:https://blog.csdn.net/starfd/article/details/45895241
标签:单双字节,PadLeft,c#PadRight
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android开发中Activity属性设置小结
2023-10-24 05:27:57
Java 数据结构与算法系列精讲之字符串暴力匹配
2021-10-06 05:43:27
![](https://img.aspxhome.com/file/2023/5/65305_0s.jpg)
Springboot-Starter造轮子之自动锁组件lock-starter实现
2022-01-21 03:53:59
![](https://img.aspxhome.com/file/2023/7/103977_0s.jpg)
详解如何在Java中实现堆排序算法
2023-11-11 11:34:46
C#使用Chart绘制曲线
2023-03-12 19:08:56
教你安装配置Android Studio
2023-07-09 03:26:17
![](https://img.aspxhome.com/file/2023/4/98684_0s.jpg)
深入了解C语言的动态内存管理
2023-09-19 23:46:11
![](https://img.aspxhome.com/file/2023/0/120830_0s.png)
Java try()语句实现try-with-resources异常管理机制操作
2022-02-06 18:29:16
![](https://img.aspxhome.com/file/2023/1/78961_0s.png)
Redis之GEO存储地理位置信息的使用
2023-12-22 14:29:49
Android编程实现wifi扫描及连接的方法
2022-11-21 21:11:36
Java MongoDB数据库连接方法梳理
2023-11-25 01:01:20
![](https://img.aspxhome.com/file/2023/8/59538_0s.png)
JavaSE static final及abstract修饰符实例解析
2021-07-01 10:54:54
![](https://img.aspxhome.com/file/2023/9/62129_0s.png)
C#实现将聊天数据发送加密
2022-09-10 05:56:35
![](https://img.aspxhome.com/file/2023/4/78184_0s.png)
Java 在PDF中添加骑缝章示例解析
2023-11-24 22:41:35
![](https://img.aspxhome.com/file/2023/5/59985_0s.png)
java开发RocketMQ消息中间件原理基础详解
2023-10-01 21:04:49
Android使用元数据实现配置信息的传递方法详细介绍
2023-11-02 15:25:48
![](https://img.aspxhome.com/file/2023/8/125528_0s.png)
Java基础学习之方法的重载知识总结
2023-10-27 01:45:15
![](https://img.aspxhome.com/file/2023/2/96132_0s.png)
C#实现将网址生成二维码图片方法介绍
2022-08-14 02:31:49
![](https://img.aspxhome.com/file/2023/3/78163_0s.png)
Flutter应用集成极光推送的实现示例
2023-06-24 03:51:04
![](https://img.aspxhome.com/file/2023/2/90172_0s.jpg)
Devexpress treelist 简介
2023-02-13 23:07:56