格式化具有未知数量变量的字符串[关闭]
Posted
技术标签:
【中文标题】格式化具有未知数量变量的字符串[关闭]【英文标题】:Formatting a string with unknown number of variables [closed] 【发布时间】:2021-04-07 13:20:08 【问题描述】:在 C# 中,我希望概括以下类型的字符串格式:
string original = "[0] is a parent of [1] who is the brother of [2] who is..";
List<string> args = new List<string>() "Alice", "Bob", "Charlie", "Doug";
string formattedString = String.Format(original, args);
预期的输出是:
Alice is a parent of Bob who is the brother of Charlie who is..
这里的主要挑战是,original
字符串可以有未知数量的变量,因为 List args
的数量总是应该高于或等于 @987654325 中的变量数量@string,我怎样才能使它工作?
【问题讨论】:
尚不清楚您要达到的目标。您如何确定原始字符串是否适合输入参数?如果不是,您期望会发生什么?您只描述了完全匹配的情况。 如果您将列表转换为string[]
并删除字符串中的[]
,String.Format
已经支持此功能。
忽略已经提到的代码错误,你需要澄清你的意思...... “我怎样才能使它工作?” ... ”original
字符串可以有未知数量的变量”... ?您当前的代码现在在做什么?它在原始字符串中有三 (3) 个变量。相同的代码适用于 1、5 或“未知”数量的变量。你应该澄清你在问什么。如果original
字符串可能有未知数量的变量……那么“如何”这个字符串是“构造的?”为什么你会关心其中“多少”变量?代码仍然可以工作。
@00110001 ,DavidL,我认为问题很明显是关于处理包含不确定数量索引的格式字符串,以及提供参数列表的要求,至少包含与格式字符串中的最大索引一样多的元素。当然,如果 KrishnaPurohit 的意思是别的,那么你是对的,问题根本不清楚:D
@JKlen ...我假设您错过了问题中的最后一句话。假设args
列表的大小有效。这使得问题不清楚,因为当前代码(如果已修复)仍然可以使用命令范围内的任意数量的参数。
【参考方案1】:
string original = "0 is a parent of 1 who is the brother of 2 who is..";
string[] args = new string[] "Alice", "Bob", "Charlie", "Doug" ;
string formattedString = String.Format(original, args);
尝试上面的代码,它将为您提供预期的输出。 我只是将 List 更改为 string[]。
【讨论】:
【参考方案2】:也许计算格式字符串中索引数量的最佳(最稳健)方法是模仿它在AppendFormatHelper 内部完成的方式。我不会在这里列出代码——它有 200 多行——但它的要点是:遍历字符并检查每个字符是否是花括号,而不是转义的花括号等等。
一种更简单(尽管更容易出错)的方法是使用正则表达式来计算它们,在这种情况下,我将引导您前往this 问题。
【讨论】:
以上是关于格式化具有未知数量变量的字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章