对齐列中的单词

时间:2016-11-26 11:53:50

标签: c# words

我对C#很陌生,所以我有一个任务来列出列中的单词。 所以基本上我有一个带有文本的记事本,例如: if (row.Cells[1].Text.ToString() == trans_id && row.Cells[2].Text.ToString() == trans_number) { row.BackColor = ColorTranslator.FromHtml("#A1DCF2"); //call the Button1_Click method Button1_Click(new object(), new EventArgs()); } protected void Button1_Click(object sender, EventArgs e) { //do the button click stuff } 并且可以说它们有6行。我需要按顺序设置它们,看起来像: wordone word two... wordmillion

每个其他单词都会从显示的位置开始(第一列中最长单词的额外空格等)我试着尽可能清楚地解释,任何提示/想法怎么做?我认为padright是解决方案吗? 附:对不起,如果布局错了,我对这个社区很新。

3 个答案:

答案 0 :(得分:2)

您可以在Console.Writeline()中使用\ t(标签); 示例

Console.WriteLine("word one\t\tword two\t\tword three");
Console.WriteLine("wordjosdjfjfisio\tanotherword\totherword");

答案 1 :(得分:2)

看起来你在这里正确!

首先,这是PadRight的文档:https://msdn.microsoft.com/en-us/library/36f2hz3a%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

从这个MSDN解释中,我们可以看到以下有用的例子:

string str = "forty-two";
char pad = '.';

Console.WriteLine(str.PadRight(15, pad));    // Displays "forty-two......".
Console.WriteLine(str.PadRight(2,  pad));    // Displays "forty-two".

所以你的答案的伪代码算法如下:让我知道你是否需要更多的解释:

  1. 将文件中的所有单词读入字符串数组
  2. 找出最长单词的长度,我们称之为maxLength
  3. 翻阅所有单词并将其格式化为表格。您想要逐行编写它们,在每行之后打印换行符。对于每一行,请获取要显示的列数(在示例中为3)。
  4. 你应该使用word.PadRight(maxLength + 1,'');
  5. 而不是写单词本身。

    注意 - MaxLength + 1只是在你最长的单词之后显示一个空格。我希望这足以让你顺利上路。随意提出任何后续问题!

答案 2 :(得分:0)

以下是使用LINQ的示例:

var text = "word_1_1   word_1_2 word_1_3\r\nsome_word_2_1 another_word_2_2  word_2_3\n word_3_1";

var words = text.Replace("\r\n", "\n").Split('\n').Select(x => Regex.Replace(x, " +", " ").Split(' '));
var lengths = words.Select(x => x.Select(y => y.Length));
var maxColumns = lengths.Max(x => x.Count());
var widths = lengths
    .Select(x => x.Concat(Enumerable.Repeat(0, maxColumns)).Take(maxColumns))
    .Aggregate(Enumerable.Repeat(0, maxColumns), (m, x) => { var t = x.ToArray(); m = m.Select((y, i) => y > t[i] ? y : t[i]); return m; });
var paddedLines = words.Select(x => String.Join(" ", x.Zip(widths, (a, b) => a.PadRight(b)).ToArray()));
var paddedText = String.Join("\r\n", paddedLines.ToArray());