我有一个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);
答案 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并调用函数。