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

C# string.PadRight()不';在我的代码中似乎不起作用,c#,C#,我有一个Powershell输出要重新格式化,因为格式在我的StandardOutput.ReadToEnd()中丢失。一行中有几个空格需要删除,我希望格式化输出,使其可读。 my messageBox中的当前输出如下所示 Microsoft.MicrosoftJigsaw All Microsoft.MicrosoftMahjong All var strings = new [] { "Microsoft.MicrosoftJigsaw All",

我有一个Powershell输出要重新格式化,因为格式在我的StandardOutput.ReadToEnd()中丢失。
一行中有几个空格需要删除,我希望格式化输出,使其可读。 my messageBox中的当前输出如下所示

Microsoft.MicrosoftJigsaw All Microsoft.MicrosoftMahjong All
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);
}
PadRight(10
不够,它是整个字符串的大小

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);
}
我可能会选择这样的方式:

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);
}
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
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);
}

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

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);
}
首先,您可以遍历所有字符串、拆分和保存

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);
}
其次,你应该得到最长的字符串长度

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);
}
最后,您可以将字符串格式化为所需的格式

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);
}

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

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);
}
功能:

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);
}
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
呼叫:

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);
}
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
结果:

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);
}
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
注意:

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);
}

代码用于演示,请根据您的要求自定义函数的totalLength和secondPartLength以及调用。

PadRight(10)的参数是完整行的大小。
Microsoft.MicrosoftJigsaw
的长度要长得多。尝试使用29/30而不是10作为padright。你能解释一下为什么你认为你的程序应该工作,以及你认为它应该做什么吗?通过了解你的信念是错误的,我们可以更好地消除你的错误信念。你可以尝试插入将标签插入字符串中,这会将不同的单词捕捉到相同的标签位置。
“\t”
是您应该在字符串中使用的,因此您的标签看起来像
“Microsoft.MicrosoftJigsaw\tAll”
“Microsoft.MicrosoftMahjong\tAll”
,有时需要添加两个标签,而这两个标签只是
“\t\t"
我现在尝试了50而不是10,但结果是,“~”被放在字符串“last”的正下方,尽管我认为它应该放在字符串“first”的正下方。我使用“~”只是为了调试。后面应该有一个空格。“~”更容易看到。谢谢你的代码,但我得到了一个转换错误ere.CS1503 C#参数2:无法从转换为'char'字符串[]splitted=line.Split(“”,StringSplitOptions.RemoveEmptyEntries);您可能正在fiddle?@J.vanLangen,
string.Split()上测试它
接受字符或字符串数组作为第一个参数,使用
StringSplitOptions
My bad,我使用了自己的扩展方法…对其进行了更改。我已经测试了此解决方案,它仍然可以正常工作。但是…我在错误的一端搜索。问题是,我试图将文本输出到MessageBox(我在问题中说明了这一点)。整个问题都来自非单空格字体。我现在使用一个新表单,其中包含一个文本框作为替代消息框。字体设置为Arial单空格,并且看起来非常棒。非常感谢你们的支持!不确定我是否应该将此答案标记为解决方案,或者用我对单空格的了解回答我自己的问题
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);
}