Puis-je utiliser String.Format() pour compléter une certaine chaîne avec des caractères arbitraires ?
Console.WriteLine("->{0,18}<-", "hello");
Console.WriteLine("->{0,-18}<-", "hello");
returns
-> hello<-
->hello <-
Je veux maintenant que les espaces soient un caractère arbitraire. La raison pour laquelle je ne peux pas le faire avec padLeft ou padRight est que je veux pouvoir construire la chaîne de formatage à un endroit/temps différent de celui où le formatage est réellement exécuté.
--EDIT--
Vu qu'il ne semble pas y avoir de solution existante à mon problème, j'ai trouvé cette solution (après Suggestion de Think Before Coding )
--EDIT2--
J'avais besoin de scénarios plus complexes, alors j'ai opté pour Deuxième suggestion de Think Before Coding
[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);
}
Comme le code était un peu trop volumineux pour être mis dans un post, je l'ai déplacé sur github en tant que gist :
http://gist.github.com/533905#file_padded_string_format_info
Les gens peuvent facilement s'y brancher et tout ce qu'ils veulent :)
0 votes
Je pense que vous devriez vous assurer que la chaîne n'est pas vide. Cela passerait-il le test : string.Fomat("{0}", (PaddedString) "Hello") ; ?