c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問(wèn)題困擾
C# 中 PadLeft ,PadRight的用法
簡(jiǎn)單來(lái)說(shuō)就是給字符串實(shí)現(xiàn)補(bǔ)位。
如:String.PadLeft(5,'0'); 表示檢查字符串長(zhǎng)度是否少于5位,若少于5位,則自動(dòng)在其左側(cè)以'0'補(bǔ)足。
同理PadRight是在右側(cè)實(shí)現(xiàn)補(bǔ)位。
補(bǔ)位
string str = "10";
str.PadLeft(5,'0')
輸出:00010
str.PadRight(5, '0')
輸出:10000
因?yàn)樵贜ET中,string的Length并不區(qū)分當(dāng)前字符串包含的字符為單字節(jié)還是雙字節(jié)字符,這樣導(dǎo)致我們?cè)谕ㄟ^(guò)字符串的PadLeft和PadRight方法處理一些需要排版顯示的字符串時(shí),會(huì)使得相關(guān)顯示參差不齊,所以這里就有了這么一個(gè)擴(kuò)展,讓雙字節(jié)顯示占用的兩個(gè)單字節(jié)寬度“吐”出來(lái),下面是具體代碼
using System.Text.RegularExpressions;
public static class StringExtensions
{
/// <summary>
/// 按單字節(jié)字符串向左填充長(zhǎng)度
/// </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;//計(jì)算得到該字符串對(duì)應(yīng)單字節(jié)字符串的長(zhǎng)度
}
/// <summary>
/// 按單字節(jié)字符串向右填充長(zhǎng)度
/// </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);
}
}
測(cè)試代碼如下
Console.WriteLine("123測(cè)試測(cè)試".PadRightWhileDouble(25) + "1");
Console.WriteLine("123測(cè)試測(cè)試".PadRightWhileDouble(25, 'A') + "1");
Console.WriteLine("1231212".PadRightWhileDouble(25) + "1");
Console.WriteLine("1231212".PadRightWhileDouble(25, 'A') + "1");
Console.WriteLine("123測(cè)試測(cè)試".PadLeftWhileDouble(25) + "1");
Console.WriteLine("123測(cè)試測(cè)試".PadLeftWhileDouble(25, 'A') + "1");
Console.WriteLine("1231212".PadLeftWhileDouble(25) + "1");
Console.WriteLine("1231212".PadLeftWhileDouble(25, 'A') + "1");
測(cè)試效果圖

下面是正常的用法
C# 中 PadLeft和PadRight 的用法
在 C# 中可以對(duì)字符串使用 PadLeft 和 PadRight 進(jìn)行輕松地補(bǔ)位。
PadLeft(int totalWidth, char paddingChar) //在字符串左邊用 paddingChar 補(bǔ)足 totalWidth 長(zhǎng)度
PadRight(int totalWidth, char paddingChar) //在字符串右邊用 paddingChar 補(bǔ)足 totalWidth 長(zhǎng)度
示例:
1.假如想輸出AAAAA,可以用string.Empty.PadLeft(5,'A');
2.假如想輸出:
*
**
***
****
可以用PadLeft實(shí)現(xiàn):
for(int i=1;i<=4;i++)
{
Console.WriteLine(string.Empty.PadLeft(i,'*'));
}
以上就是c# String擴(kuò)展 讓你在PadLeft和PadRight時(shí)不再受單雙字節(jié)問(wèn)題困擾的詳細(xì)內(nèi)容,更多關(guān)于c# PadLeft和PadRight的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity3D實(shí)現(xiàn)待機(jī)狀態(tài)圖片循環(huán)淡入淡出
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)待機(jī)狀態(tài)圖片循環(huán)淡入淡出,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法示例
這篇文章主要介紹了C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了FileStream文件流的形式循環(huán)讀取大文件的相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPostBuildPlayerScriptDLLs實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
詳解C#對(duì)路徑...的訪問(wèn)被拒絕解決過(guò)程
這篇文章主要介紹了詳解C#對(duì)路徑...的訪問(wèn)被拒絕解決過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

