String.Format不会创建正确的间距,每个方法都会耗尽

时间:2014-10-08 18:41:47

标签: c# dictionary spacing string.format

这似乎是一个微不足道的问题,但我发誓我已经用尽了所有能找到的方法。我试图将字典的内容输出到文本框。这是用C#编写的。 Idk是多么相关,但我输出到WPF文本框。我尝试过以下方法:

Dictionary<string, int> nGramDictionary = StatisticalBreakDown.getNGramFrequency(filePath, 3);
MasterStatsTextBlock.Text += "~N-Gram Frequency~" + "\r\n";
foreach (var kvp in nGramDictionary)
{
    MasterStatsTextBlock.Text += string.Format("{0,-40}{1}{2}", kvp.Key, kvp.Value, Environment.NewLine);
}
MasterStatsTextBlock.Text += "\r\n";

Dictionary<string, int> nGramDictionary = StatisticalBreakDown.getNGramFrequency(filePath, 3);
MasterStatsTextBlock.Text += "~N-Gram Frequency~" + "\r\n";
foreach (var kvp in nGramDictionary)
{
    MasterStatsTextBlock.Text += string.Format("{0}{1}{2}", kvp.Key.PadRight(-40), kvp.Value, Environment.NewLine);
}
MasterStatsTextBlock.Text += "\r\n";

Dictionary<string, int> nGramDictionary = StatisticalBreakDown.getNGramFrequency(filePath, 3);
MasterStatsTextBlock.Text += "~N-Gram Frequency~" + "\r\n";
foreach (var kvp in nGramDictionary)
{
    MasterStatsTextBlock.Text += string.Format("{0}\t\t\t{1}{2}", kvp.Key, kvp.Value, Environment.NewLine);
}
MasterStatsTextBlock.Text += "\r\n";

但是都不行。每个人都发誓这些会起作用,但他们没有。以下是所有这三个输出的结果:

~N-Gram Frequency~
talan kirk book                        1
kirk book of                         1
book of mormon                        1
of mormon am                          1
mormon am tt                            1
am tt extraction                        1
tt extraction nephi                     1
extraction nephi nephi                1
nephi nephi the                       1
nephi the lord                       1
the lord speaks                        1
lord speaks to                        1
speaks to his                         1
to his children                       1
his children the                       1
children the savior                   1
the savior teaches                     1
savior teaches plainly                1
teaches plainly because                1

请帮忙。我不知道为什么这些不会起作用。

1 个答案:

答案 0 :(得分:1)

我怀疑问题是您使用的是TextBox,我的猜测是您还没有将文字设置为等宽字体...但是您正在尝试使用字符串格式来准确定位值。

要调查字符串格式,我建议您改用控制台应用。例如,以下演示显示字符串格式正常工作。键和值都有一个最大长度,键是左对齐的,值是右对齐的:

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        var data = new Dictionary<string, int>
        {
            { "first", 10 },
            { "second", 1 },
            { "third", 100000 }
        };

        foreach (var entry in data)
        {
            Console.WriteLine("{0,-20}{1,8}", entry.Key, entry.Value);
        }
    }
}

在你的WPF用户界面中尝试一下,你可能会看到相同的破坏 - 除非你将字体设置为等宽字体。

然而,等宽字体可能看起来很难看......在这种情况下,您可能根本不想使用TextBox。您可以使用其他更高级的基于文本的控件 - 或者您可以使用更适合显示数据列表/网格的控件。