Can I use String.Format() to pad a certain string with arbitrary characters?
Console.WriteLine('->{0,18}<-', 'hello'); Console.WriteLine('->{0,-18}<-', 'hello'); returns -> hello<- ->hello <-
I now want the spaces to be an arbitrary character. The reason I cannot do it with padLeft or padRight is because I want to be able to construct the format string at a different place/time then the formatting is actually executed.
–EDIT–
Seen that there doesn’t seem to be an existing solution to my problem I came up with this (after Think Before Coding’s suggestion)
–EDIT2–
I needed some more complex scenarios so I went for Think Before Coding’s second suggestion
[TestMethod] public void PaddedStringShouldPadLeft() { string result = string.Format(new PaddedStringFormatInfo(), '->{0:20:x} {1}<-', 'Hello', 'World'); string expected = '->xxxxxxxxxxxxxxxHello World<-'; Assert.AreEqual(result, expected); } [TestMethod] public void PaddedStringShouldPadRight() { string result = string.Format(new PaddedStringFormatInfo(), '->{0} {1:-20:x}<-', 'Hello', 'World'); string expected = '->Hello Worldxxxxxxxxxxxxxxx<-'; Assert.AreEqual(result, expected); } [TestMethod] public void ShouldPadLeftThenRight() { string result = string.Format(new PaddedStringFormatInfo(), '->{0:10:L} {1:-10:R}<-', 'Hello', 'World'); string expected = '->LLLLLHello WorldRRRRR<-'; Assert.AreEqual(result, expected); } [TestMethod] public void ShouldFormatRegular() { string result = string.Format(new PaddedStringFormatInfo(), '->{0} {1:-10}<-', 'Hello', 'World'); string expected = string.Format('->{0} {1,-10}<-', 'Hello', 'World'); Assert.AreEqual(expected, result); }
Because the code was a bit too much to put in a post, I moved it to github as a gist:
http://gist.github.com/533905#file_padded_string_format_info
There people can easily branch it and whatever 🙂
There is another solution.
Implement
IFormatProviderto return aICustomFormatterthat will be passed to string.Format :Then you can use it like this :