如何使用String.Format
格式并将其输出转换为输入?
例如:
string formatString = "My name is {0}. I have {1} cow(s).";
string s = String.Format(formatString, "strager", 2);
// Call the magic method...
ICollection<string> parts = String.ReverseFormat(formatString, s);
// parts now contains "strager" and "2".
我知道我可以使用正则表达式来执行此操作,但我想使用相同的格式字符串,因此我只需要维护一行代码而不是两行。
答案 0 :(得分:1)
以下是在C#中尝试使用Scanf等效项的人的一些代码:
答案 1 :(得分:0)
我不相信有任何内置支持这一点,但在C#中,您可以将一组对象直接传递给任何采用params
标记数组参数的方法,例如String.Format()
。除此之外,我不相信C#&amp; amp; .NET Framework知道字符串X是从魔术格式字符串Y构建的,并撤消合并。
因此,我唯一能想到的就是你可以这样格式化你的代码:
object[] parts = {"strager", 2};
string s = String.Format(formatString, parts);
// Later on use parts, converting each member .ToString()
foreach (object p in parts)
{
Console.WriteLine(p.ToString());
}
不理想,可能不是你想要的,但我认为这是唯一的方法。
答案 2 :(得分:0)
你必须自己实现它,因为没有任何内置的功能可以帮助你。
为此,我建议您获取.Net string.format implmentation的实际源代码(实际上,相关代码位于StringBuilder.AppendFormat()
)。它是免费提供的,它使用状态机以非常高效的方式遍历字符串。您可以模仿该代码,以便遍历格式化的字符串并提取该数据。
请注意,并不总是可以倒退。有时,格式化的字符串可以包含与格式说明符匹配的字符,这使得程序很难知道原始文件的样子。当我想到它时,你可能会更好地运行原始字符串以将其转换为正则表达式,然后使用它来进行匹配。
我还建议您将方法重命名为InvertFormat()
,因为ReverseFormat听起来像您期望的输出:
。)s(woc 2 evah .regarts si eman yM