Pad Left&Pad Right(Pad Center)String

String有PadRightPadRight 。 我需要左右填充(中心对齐)。 有没有标准化的方法来实现这一目标,或者更好的是,实现同一目标的内置方式?

从来没听说过。 如果您发现自己经常使用扩展方法,则可以创建扩展方法。 假设您希望字符串最终位于中心,请使用以下内容

 public string PadBoth(string source, int length) { int spaces = length - source.Length; int padLeft = spaces/2 + source.Length; return source.PadLeft(padLeft).PadRight(length); } 

要使其成为扩展方法,请执行以下操作:

 namespace System { public static class StringExtensions { public static string PadBoth(this string str, int length) { int spaces = length - str.Length; int padLeft = spaces / 2 + str.Length; return str.PadLeft(padLeft).PadRight(length); } } } 

顺便说一句,我只是将我的扩展包含在系统命名空间中 – 这取决于你所做的事情。

这是一个自定义实现,不需要重建字符串。

它也适用于奇数

  static string PadCenter(string text, int newWidth) { const char filler = ' '; int length = text.Length; int charactersToPad = newWidth - length; if (charactersToPad < 0) throw new ArgumentException("New width must be greater than string length.", "newWidth"); int padLeft = charactersToPad/2 + charactersToPad%2; //add a space to the left if the string is an odd number int padRight = charactersToPad/2; StringBuilder resultBuilder = new StringBuilder(newWidth); for (int i = 0; i < padLeft; i++) resultBuilder.Insert(i, filler); for (int i = 0; i < length; i++) resultBuilder.Insert(i + padLeft, text[i]); for (int i = newWidth - padRight; i < newWidth; i++) resultBuilder.Insert(i, filler); return resultBuilder.ToString(); } 

你可以用这个来自己做:

  string test = "Wibble"; int padTo = 12; int padSize = (padTo - test.Length) / 2; if (padSize > 0) { test = test.Trim().PadLeft(test.Length + padSize).PadRight(test.Length + 2 * padSize); } 

只需根据需要调整此值以处理奇数填充长度,并使其成为一种扩展方法,如果这样可以让您的生活更轻松。

这是@ david-colwell 扩展方法的略微改进版本,也可以选择填充填充字符:

 namespace System { public static class StringExtensions { public static string PadSides(this string str, int totalWidth, char paddingChar = ' ') { int padding = totalWidth - str.Length; int padLeft = padding / 2 + str.Length; return str.PadLeft(padLeft, paddingChar).PadRight(totalWidth, paddingChar); } } } 

我认为这有点改进。

 namespace System { public static class StringExtensions { public static string PadCenter(this string str, int totalLength, char padChar = '\u00A0') { int padAmount = totalLength - str.Length; if (padAmount <= 1) { if (padAmount == 1) { return str.PadRight(totalLength); } return str; } int padLeft = padAmount/2 + str.Length; return str.PadLeft(padLeft).PadRight(totalLength); } } } 

你也可以这样创建你的扩展:

 public static string PadBoth(this string s, int padValue) { return s.PadLeft(padValue).PadRight(padValue); } 

并在字符串上使用PadBoth方法。

  /* Output looks like this *****Luke***** *****Leia***** *****Han****** **Chewbecca*** */ string result = ""; string names = "Luke,Leia,Han,Chewbecca"; string[] charA = names.Split(','); for (int i = 0; i < charA.Length; i++) { int padLeft = (14 - charA[i].Length) / 2; string temp = charA[i].PadLeft(charA[i].Length + padLeft, '*'); result += temp.PadRight(14, '*') + "\n"; } Console.WriteLine(result);