string.PadRight()在我的代码中似乎不起作用

时间:2019-01-23 13:49:27

标签: c#

我有一个Powershell输出要重新格式化,因为格式化在我的StandardOutput.ReadToEnd()中丢失了。
一行中有几个空白要删除,我想使输出的格式可读。 我的messageBox中的当前输出看起来像

Microsoft.MicrosoftJigsaw     All
Microsoft.MicrosoftMahjong     All

我想要的是

Microsoft.MicrosoftJigsaw     All
Microsoft.MicrosoftMahjong    All

我在做什么错?
我的C#知识仍然只是基础知识

我在这里找到了这个问题,但是也许我不能正确理解答案。该解决方案对我不起作用。
Padding a string using PadRight method

这是我当前的代码:

string first = "";
string last = "";
int idx = line.LastIndexOf(" ");
if (idx != -1)
    {
     first = line.Substring(0, idx).Replace(" ","").PadRight(10, '~');
     last = line.Substring(idx + 1);
    }
MessageBox.Show(first + last);

3 个答案:

答案 0 :(得分:1)

PadRight(10是不够的,它是完整字符串的大小。

我可能会选择:

string[] lines = new[] 
{
    "Microsoft.MicrosoftJigsaw     All",
    "Microsoft.MicrosoftMahjong            All"
};

// iterate all (example) lines
foreach (var line in lines)
{
    // split the string on spaces and remove empty ones 
    // (so multiple spaces are ignored)
    // ofcourse, you must check if the splitted array has atleast 2 elements.
    string[] splitted = line.Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

    // reformat the string, with padding the first string to a total of 40 chars.
    var formatted = splitted[0].PadRight(40, ' ') + splitted[1];

    // write to anything as output.
    Trace.WriteLine(formatted);
}

将显示:

Microsoft.MicrosoftJigsaw               All
Microsoft.MicrosoftMahjong              All

因此,您需要确定第一个字符串的最大长度。

答案 1 :(得分:0)

String.PadLeft()第一个参数定义填充字符串的长度,而不是填充符号计数。

首先,您可以遍历所有字符串,进行拆分和保存。

第二,您应该获得最长的字符串长度。

最后,您可以将字符串格式化为所需的格式。

var strings = new [] 
{
    "Microsoft.MicrosoftJigsaw     All",
    "Microsoft.MicrosoftMahjong     All"
};

var keyValuePairs = new List<KeyValuePair<string, string>>();

foreach(var item in strings)
{
    var parts = item.Split(new [] {" "}, StringSplitOptions.RemoveEmptyEntries);

    keyValuePairs.Add(new KeyValuePair<string, string>(parts[0], parts[1]));
}

var longestStringCharCount = keyValuePairs.Select(kv => kv.Key).Max(k => k.Length);
var minSpaceCount = 5; // min space count between parts of the string

var formattedStrings = keyValuePairs.Select(kv => string.Concat(kv.Key.PadRight(longestStringCharCount + minSpaceCount, ' '), kv.Value));  

foreach(var item in formattedStrings)
{
    Console.WriteLine(item);
}

结果:

Microsoft.MicrosoftJigsaw      All
Microsoft.MicrosoftMahjong     All

答案 2 :(得分:0)

假设字符串第二部分的长度为10,但是您可以更改它。请尝试以下代码:

功能

private string PrepareStringAfterPadding(string line, int totalLength)
{
    int secondPartLength = 10;
    int lastIndexOfSpace = line.LastIndexOf(" ");
    string firstPart = line.Substring(0, lastIndexOfSpace + 1).Trim().PadRight(totalLength - secondPartLength);
    string secondPart = line.Substring(lastIndexOfSpace + 1).Trim().PadLeft(secondPartLength);
    return firstPart + secondPart;
}

呼叫:

    string line1String = PrepareStringAfterPadding("Microsoft.MicrosoftJigsaw     All", 40);
    string line2String = PrepareStringAfterPadding("Microsoft.MicrosoftMahjong     All", 40);

结果:

Microsoft.MicrosoftJigsaw            All
Microsoft.MicrosoftMahjong           All

注意:

代码仅供演示使用,请根据需要自定义totalLength和secondPartLength并调用函数。