.NET String.Format方法是否允许将字符串放置在固定长度的字符串内的固定位置。
“弦乐在这里” “弦乐在这里” “字符串去这里”
如何使用.NET完成?
编辑 -我尝试过Format / PadLeft / PadRight到死。他们不工作。我不知道为什么 我最终编写了自己的函数来执行此操作。
编辑 -我犯了一个错误,并在格式说明符中使用了冒号而不是逗号。应该是“ {0,20}”。
感谢您提出的所有出色而正确的答案。
.NET String.Format方法是否允许将字符串放置在固定长度的字符串内的固定位置。
“弦乐在这里” “弦乐在这里” “字符串去这里”
如何使用.NET完成?
编辑 -我尝试过Format / PadLeft / PadRight到死。他们不工作。我不知道为什么 我最终编写了自己的函数来执行此操作。
编辑 -我犯了一个错误,并在格式说明符中使用了冒号而不是逗号。应该是“ {0,20}”。
感谢您提出的所有出色而正确的答案。
Answers:
这将为您提供所需的确切字符串:
string s = "String goes here";
string lineAlignedRight = String.Format("{0,27}", s);
string lineAlignedCenter = String.Format("{0,-27}",
String.Format("{0," + ((27 + s.Length) / 2).ToString() + "}", s));
string lineAlignedLeft = String.Format("{0,-27}", s);
,
而不是:
像其他所有格式化用例一样?
从Visual Studio 2015开始,您还可以使用插值字符串来完成此操作(它是一个编译器技巧,因此,所针对的.net框架版本无关紧要)。
string value = "String goes here";
string txt1 = $"{value,20}";
string txt2 = $"{value,-20}";
已显示您PadLeft
和PadRight
。这将填补丢失的内容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
试试这个:
"String goes here".PadLeft(20,' ');
"String goes here".PadRight(20,' ');
为中心获取字符串的长度,并用必要的字符进行padleft和padright
int len = "String goes here".Length;
int whites = len /2;
"String goes here".PadRight(len + whites,' ').PadLeft(len + whites,' ');
String.Format("{0,-length}", something)
不会编译。)
感谢您的讨论,此方法也适用(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
这是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);
}
为了帮助理解,使用了整数变量firstpad。s.PadLeft(firstpad)应用(正确数量的)前导空白。最右边的PadRight(desiredLength)具有较低的绑定,方法是在结尾加上空白。
这是我受Joel Coehoorn的回答,Oliver的编辑以及shaunmartin的评论启发而创建的VB.NET版本:
<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
这是在公共模块内设置为字符串扩展名(在VB.NET中执行扩展的方式,与C#有点不同)。我的微小变化是将空字符串视为空字符串,并用宽度值填充空字符串(满足我的特殊需求)。希望任何需要它的人都可以轻松地将其转换为C#。如果有更好的方法来引用我上面提到的答案,编辑和评论,这对我的帖子产生了启发,请告诉我,我会做的-我是发布的新手,所以我不知道发表评论(可能没有足够的代表)。
我张贴了一篇CodeProject文章,可能是您想要的。
看到: 间接宽度和样式格式的AC#方法。
基本上,它是一种FormatEx方法,其作用类似于String.Format,但它允许居中对齐修饰符。
FormatEx("{0,c10}", value);
表示将varArgs [0]的值放在一个10个字符的宽字段中,如果需要额外的填充空间,则向右倾斜。
FormatEx("{0,c-10}", value);
表示将varArgs [0]的值放在10个字符的宽字段中,如果需要额外的填充空间,则向左倾斜。
编辑:在内部,它是Joel的PadCenter与一些语法分析的组合,以重组格式和varArgs,以实现对String.Format的调用。
-杰西
似乎您想要这样的东西,它将把您的字符串放在固定长度的字符串中的固定点上:
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超过totallength,这将有问题
/// <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;
}