将字符串对齐到列中

时间:2012-11-11 01:11:39

标签: c# string format

我有一组用户可以添加或减去的字符串。我需要一种方法来打印列中的字符串,以便每个字符串的第一个字母对齐。但是,我必须在运行时更改列数。虽然默认值为4列,但使用者可以选择1到6之间的任何数字。我不知道如何将未知数量的字符串格式化为未知数量的列。

示例输入: 我们是一个人,所以你可以去一个

四列的示例输出

"词"用2个字母:

它也是我们

哟你去了

"词" 1个字母:

a i o u

t y z c

注意:不要担心在我的代码中解析我已经拥有的单词,如果有帮助我可以添加。

2 个答案:

答案 0 :(得分:2)

如果您尝试创建固定宽度列,则可以在创建行时使用string.PadLeft(paddingChar, width)string.PadRight(paddingChar, width)

http://msdn.microsoft.com/en-us/library/system.string.padleft.aspx

你可以循环你的单词并在每个单词上调用.PadXXXX(宽度)。它会自动用正确的空格数填充你的单词,使你的字符串成为你提供的宽度。

答案 1 :(得分:1)

您可以将总线宽除以列数,并将每个字符串填充到该长度。您可能还想修剪超长字符串。这是一个填充短于列宽的字符串并修剪较长字符串的示例。您可能想要调整更长字符串的行为:

    int Columns = 4;
    int LineLength = 80;

    public void WriteGroup(String[] group)
    {
        // determine the column width given the number of columns and the line width
        int columnWidth = LineLength / Columns;

        for (int i = 0; i < group.Length; i++)
        {
            if (i > 0 && i % Columns == 0)
            {   // Finished a complete line; write a new-line to start on the next one
                Console.WriteLine();
            }
            if (group[i].Length > columnWidth)
            {   // This word is too long; truncate it to the column width
                Console.WriteLine(group[i].Substring(0, columnWidth));
            }
            else
            {   // Write out the word with spaces padding it to fill the column width
                Console.Write(group[i].PadRight(columnWidth));
            }
        }
    }

如果您使用此示例代码调用上述方法:

var groupOfWords = new String[] { "alphabet", "alegator", "ant", 
    "ardvark", "ark", "all", "amp", "ally", "alley" };
WriteGroup(groupOfWords);

然后你应该得到如下所示的输出:

alphabet            alegator            ant                 ardvark
ark                 all                 amp                 ally
alley