在C#中使用动态给定的长度左对齐一个字符串

时间:2011-04-06 16:45:41

标签: c#

我正在尝试编写左对齐函数,例如:

private static string LeftJustify(string field, int len)
{
    string retVal = string.empty;

    ///todo:

   return retVal;

}
你可以帮我把逻辑放在函数中吗?

7 个答案:

答案 0 :(得分:3)

如果您只是想填充字符串,可以直接使用String.PadRight

private static string LeftJustify(string field, int len)
{
    return field.PadRight(len);
}

答案 1 :(得分:1)

您可以使用字符串函数PadLeftPadRight

这些将为字符串添加空格,尽可能多。

答案 2 :(得分:0)

来自C# Examples

  

要将字符串向右或向左对齐,请使用静态方法String.Format。要将字符串对齐到左侧(右侧的空格),请使用逗号(,)后跟负数字符格式化[t] ern:String.Format("{0,–10}", text)。要右对齐,请使用正数:{0,10}

C#:

Console.WriteLine("-------------------------------");
Console.WriteLine("First Name | Last Name  |   Age");
Console.WriteLine("-------------------------------");
Console.WriteLine(String.Format("{0,-10} | {1,-10} | {2,5}", "Bill", "Gates", 51));
Console.WriteLine(String.Format("{0,-10} | {1,-10} | {2,5}", "Edna", "Parker", 114));
Console.WriteLine(String.Format("{0,-10} | {1,-10} | {2,5}", "Johnny", "Depp", 44));
Console.WriteLine("-------------------------------");

输出:

 -------------------------------
 First Name | Last Name  |   Age
 -------------------------------
 Bill       | Gates      |    51
 Edna       | Parker     |   114
 Johnny     | Depp       |    44
 -------------------------------

答案 3 :(得分:0)

您可以明确使用PadLeft

或像这样使用String.Format(它完成大部分数学运算)

String.Format("|{0,-10}|", field)
输出:if field =" Fred"

|      Fred|

答案 4 :(得分:0)

如果你想要维持一个设定长度,并且字符串长度不同,你可以

while(retval.length <21) {retval =“”+ retval}

这将填充字符串,直到它长达20个字符。

答案 5 :(得分:0)

根据你的评论,你想用空格填充左边。 PadLeft()适用于此,但您需要了解'totalWidth'参数:

var s = "some text";
int paddingWidth = 4;

// example for no limit on line width
s.PadLeft(s.Length + paddingWidth, ' '); // results in "    someText"

但是如果允许的行长度有限制,它将产生错误的输出(即没有填充所需的字符数量)并且没有错误。您甚至可以指定小于总源字符串长度的totalWidth

如果您想要总是预先添加固定数量的空格,您也可以使用它:

var padding = new StringBuilder();
padding.Append(' ', 5); // replace 5 with what's useful.
var result = padding + someString;

替代空格是制表符字符,它会缩进一定量 - 通常是4个空格(取决于上下文)。这可以通过以下方式实现:

padding.Append('\t', count);

等等。 您可以将填充的逻辑放在额外的方法或扩展方法中。 注意,出于效率原因,我没有使用StringBuilder。这很方便。

答案 6 :(得分:0)

您需要添加一些参数验证,但这应该有效。

public static class Extensions
{
    static readonly char[] _whiteSpaceCharacters;

    static Extensions()
    {
        var r = new List<char>();
        for (char c = char.MinValue; c < char.MaxValue; c++)
            if (char.IsWhiteSpace(c))
                r.Add(c);
        _whiteSpaceCharacters = r.ToArray();
    }

    public static string LeftJustify(this string value)
    {
        return value.LeftJustify(4);
    }

    public static string LeftJustify(this string value, int length)
    {
        var sb = new StringBuilder();
        using (var sr = new StringReader(value))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                sb.AppendLine(
                    line
                    .TrimStart(_whiteSpaceCharacters)
                    .PadLeft(length, ' ')
                );
            }
        }
        return sb.ToString();
    }
}

<强>输入

     Line 1
         Line 2     
             Line 3
 Line 4

<强>输出

     Line 1
     Line 2     
     Line 3
     Line 4