.NET格式化固定空格的string

.NET String.Format方法是否允许将string放置在固定长度的string中的固定位置。

 “弦乐在这里”
 “弦乐在这里”
 “弦乐在这里”

这是如何使用.NET完成的?

编辑 – 我已经尝试格式/ PadLeft / PadRight死亡。 他们不工作。 我不知道为什么。 我最终写了自己的function来做到这一点。

编辑 – 我犯了一个错误,并在格式说明符中使用冒号而不是逗号。 应该是“{0,20}”。

感谢所有的优秀和正确的答案。

这会给你所要求的string:

string s = "String goes here"; string line1 = String.Format("{0,27}", s); string line2 = String.Format("{0,-27}", String.Format("{0," + ((27 + s.Length) / 2).ToString() + "}", s)); string line3 = String.Format("{0,-27}", s); 

第一个和最后一个,至less可以使用下面的语法:

 String.Format("{0,20}", "String goes here"); String.Format("{0,-20}", "String goes here"); 

你已经显示PadRightPadRight 。 这将填补丢失的PadCenter

 public static class StringUtils { public static string PadCenter(this string s, int width, char c) { if (s == null || width <= s.Length) return s; int padding = width - s.Length; return s.PadLeft(s.Length + padding / 2, c).PadRight(width, c); } } 

注意自己:不要忘记更新自己的简历:“有一天,我甚至修复了Joel Coehoorn的代码!” ; -D -Serge

从Visual Studio 2015开始,你也可以使用Interpolated Strings (它是一个编译器技巧,所以你select哪个版本的.net框架)。

 string value = "String goes here"; string txt1 = $"{value,20}"; string txt2 = $"{value,-20}"; 

尝试这个:

 "String goes here".PadLeft(20,' '); "String goes here".PadRight(20,' '); 

为中心得到的string的长度,做padleft和padright与必要的字符

 int len = "String goes here".Length; int whites = len /2; "String goes here".PadRight(len + whites,' ').PadLeft(len + whites,' '); 

感谢您的讨论,这个方法也适用(VB):

 Public Function StringCentering(ByVal s As String, ByVal desiredLength As Integer) As String If s.Length >= desiredLength Then Return s Dim firstpad As Integer = (s.Length + desiredLength) / 2 Return s.PadLeft(firstpad).PadRight(desiredLength) End Function 
  1. StringCentering()接受两个input值,并返回一个格式化的string。
  2. s的长度大于或等于deisredLength时 ,函数返回原始string。
  3. s的长度小于desiredLength时 ,它将被填充两端。
  4. 由于字符间距是整数且没有半空间,所以可以有不均匀的空间分割。 在这个实施中,更大的分裂到了领先的地位。
  5. 由于PadLeft()PadRight() ,函数需要.NET Framework。
  6. 在函数的最后一行,绑定是从左到右,所以应用firstpad ,接着是desiredLength pad。

这里是C#版本:

 public string StringCentering(string s, int desiredLength) { if (s.Length >= desiredLength) return s; int firstpad = (s.Length + desiredLength) / 2; return s.PadLeft(firstpad).PadRight(desiredLength); } 

为了帮助理解,使用整数variablesfirstpads.PadLeft(firstpad)应用(正确数量的)前导空格。 最右边的PadRight(desiredLength)具有较低的绑定,通过应用尾随空格完成。

下面是我创build的VB.NET版本,受Joel Coehoorn的回答,Oliver的编辑和shaunmartin的评论的启发:

  <Extension()> Public Function PadCenter(ByVal [string] As String, ByVal width As Integer, ByVal c As Char) As String If [string] Is Nothing Then [string] = String.Empty If (width <= [string].Length) Then Return [string] Dim padding = width - [string].Length Return [string].PadLeft([string].Length + (padding \ 2), c).PadRight(width, c) End Function <Extension()> Public Function PadCenter(ByVal [string] As String, ByVal width As Integer) As String If [string] Is Nothing Then [string] = String.Empty If (width <= [string].Length) Then Return [string] Dim padding = width - [string].Length Return [string].PadLeft([string].Length + (padding \ 2)).PadRight(width) End Function 

这被设置为一个string扩展,在一个公共模块(你在VB.NET中做扩展的方式,有点不同于C#)。 我稍作改动就是将空string视为空string,并用宽度值填充空string(满足我的特殊需要)。 希望这会很容易地转换为C#的人谁需要它。 如果有更好的方法可以参考我上面提到的答案,编辑和评论,这些启发了我的文章,请让我知道,我会做的 – 我是相对较新的发布,我不知道发表评论(可能还没有足够的代表)。

我发布了一个CodeProject文章,可能是你想要的。

请参阅: 间接宽度和样式格式的AC#方式。

基本上它是一种方法,FormatEx,像String.Format一样,除了允许居中alignment修饰符。

 FormatEx("{0,c10}", value); 

意味着将varArgs [0]的值放在10个字符宽的字段中,如果需要额外的填充空间,则向右倾斜。

 FormatEx("{0,c-10}", value); 

意味着将varArgs [0]的值居中放置在一个10个字符宽的字段中,如果需要额外的填充空间,则向左倾斜。

编辑:在内部,它是一个Joel的PadCenter与一些parsing重组的格式和varArgs调用String.Format,做你想做的。

-Jesse

看起来像你想要这样的东西,这将把你的string固定在一个固定的长度的string:

 Dim totallength As Integer = 100 Dim leftbuffer as Integer = 5 Dim mystring As String = "string goes here" Dim Formatted_String as String = mystring.PadLeft(leftbuffer + mystring.Length, "-") + String.Empty.PadRight(totallength - (mystring.Length + leftbuffer), "-") 

请注意,如果mystring.length + leftbuffer超过总长,这将会有问题

 /// <summary> /// Returns a string With count chars Left or Right value /// </summary> /// <param name="val"></param> /// <param name="count"></param> /// <param name="space"></param> /// <param name="right"></param> /// <returns></returns> public static string Formating(object val, int count, char space = ' ', bool right = false) { var value = val.ToString(); for (int i = 0; i < count - value.Length; i++) value = right ? value + space : space + value; return value; }