簡體   English   中英

文本 alignment 和 C#

[英]Text alignment with C#

我有一串帶線條的文本:

string s = "word longerword longestword evenlongerword aditionalword\n
longerword word evenlongerword longestword"

我想像這樣對齊它們(一個單詞在另一個單詞之間,單詞之間有 1 個空格):

s = "word       longerowrd longestword    evelongerword aditionalword
     longerword word       evenlongerword longestword"

進一步說明:文本是一個連續的字符串,帶有'\n'(換行符)字符將文本分成幾行。 此示例中的單詞長度不超過 80 個字符(因此不需要分詞或“-”)。 我希望列中的所有單詞對齊,以便下一列中的任何單詞都沒有以之前單詞的空格 position 開頭,如果這有意義的話。

(可選)每行應少於 80 個字符。 我應該如何處理這個?

它不漂亮,但這段代碼肯定會 output 你想要什么:

string[] lines = "word longerword longestword evenlongerword aditionalword\nlongerword word evenlongerword longestword".Split('\n');
string result;
Dictionary<int, int> wordSize = new Dictionary<int, int>();

// Build word sizes first
foreach (string line in lines)
{
    string[] words = line.Split(' ');

    for (int i = 0; i < words.Length; i++)
    {
        if (!wordSize.ContainsKey(i))
            wordSize.Add(i, 0);
        if (wordSize[i] < words[i].Length)
            wordSize[i] = words[i].Length;
    }
}

// Output results
result = string.Empty;
foreach (string line in lines)
{
    string[] words = line.Split(' ');

    for (int i = 0; i < words.Length; i++)
        result += words[i].PadRight(wordSize[i] + 1, ' ');
    result = result.TrimEnd();
    result += "\n";
}

Console.WriteLine(result);

Output:

word       longerword longestword    evenlongerword aditionalword
longerword word       evenlongerword longestword

這個怎么運作

首先,程序確定每個單詞的長度。 它通過遍歷每一行,然后是該行中的每個單詞來做到這一點。

生成的單詞長度存儲在字典wordSize中,鍵0表示第一個單詞,鍵1表示第二個單詞,依此類推。 當然,只有當它超過上一行的單詞長度時,才會更新該值。

在此之后,它會返回每一行和每個單詞,然后將填充的單詞添加到 output,加上 1 個字符作為額外的空格。

string s = "word longerword longestword evenlongerword aditionalword word longerword longestword evenlongerword aditionalword word longerword longestword evenlongerword aditionalword";
StringBuilder alignedString = new StringBuilder();
string[] words = s.Split(' ');
foreach (var word in words)
{
    if (alignedString.Length + word.Length > 80)
        alignedString.Append(Environment.NewLine);
    alignedString.Append(word);
    alignedString.Append(" \t");
}
return alignedString.toString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM