String.Format 计算预期参数的数量

2023-11-25

是否可以计算字符串中预期参数/参数的数量String.Format()?

例如:"Hello {0}. Bye {1}"应返回计数 2。

我需要在之前显示错误string.Format()抛出异常。

感谢您的帮助。


您可以使用正则表达式,例如 {(.*?)},然后只计算匹配项。如果您需要处理像 {0} {0} 这样的情况(我猜应该返回 1),那么这会变得更加困难,但是您始终可以将所有匹配项放入列表中,然后对其执行 Linq select unique 操作。我在想类似下面的代码:

var input = "{0} and {1} and {0} and {2:MM-dd-yyyy}";
var pattern = @"{(.*?)}";
var matches = Regex.Matches(input, pattern);
var totalMatchCount = matches.Count;
var uniqueMatchCount = matches.OfType<Match>().Select(m => m.Value).Distinct().Count();
Console.WriteLine("Total matches: {0}", totalMatchCount);
Console.WriteLine("Unique matches: {0}", uniqueMatchCount);

EDIT:

我想解决评论中提出的一些问题。下面发布的更新代码处理存在转义括号序列(即 {{5}})、未指定参数的情况,并且还返回最高参数的值 + 1。该代码假设输入字符串将格式良好,但在某些情况下这种权衡可能是可以接受的。例如,如果您知道输入字符串是在应用程序中定义的,而不是由用户输入生成的,则可能不需要处理所有边缘情况。还可以使用单元测试来测试要生成的所有错误消息。我喜欢这个解决方案的一点是,它很可能会处理扔给它的绝大多数字符串,并且它是一个比已确定的解决方案更简单的解决方案here(这建议重新实现 string.AppendFormat)。我会考虑这样一个事实:该代码可能无法通过使用 try-catch 并仅返回“无效的错误消息模板”或类似的内容来处理所有边缘情况。

下面的代码的一项可能的改进是更新正则表达式,使其不返回前导“{”字符。这将消除对 Replace("{", string.Empty) 的需要。同样,这段代码可能并不适合所有情况,但我认为它充分解决了所提出的问题。

const string input = "{0} and {1} and {0} and {4} {{5}} and {{{6:MM-dd-yyyy}}} and {{{{7:#,##0}}}} and {{{{{8}}}}}";
//const string input = "no parameters";
const string pattern = @"(?<!\{)(?>\{\{)*\{\d(.*?)";
var matches = Regex.Matches(input, pattern);
var totalMatchCount = matches.Count;
var uniqueMatchCount = matches.OfType<Match>().Select(m => m.Value).Distinct().Count();
var parameterMatchCount = (uniqueMatchCount == 0) ? 0 : matches.OfType<Match>().Select(m => m.Value).Distinct().Select(m => int.Parse(m.Replace("{", string.Empty))).Max() + 1;
Console.WriteLine("Total matches: {0}", totalMatchCount);
Console.WriteLine("Unique matches: {0}", uniqueMatchCount);
Console.WriteLine("Parameter matches: {0}", parameterMatchCount);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

String.Format 计算预期参数的数量 的相关文章

随机推荐

  • 如何在python(windows平台)中安装xgboost包?

    http xgboost readthedocs org en latest python python intro html 在xgboost的主页 上面的链接 上 写着 要安装 XGBoost 请执行以下步骤 你需要跑make在项目的根
  • 使用 FindMatchingFiles 工作流活动的 MatchPattern 属性

    我正在使用 TFS 2010 Team Build 自定义构建过程模板的默认工作流程 有一个活动叫FindMatchingFiles允许使用中定义的模式搜索特定文件MatchPattern财产 如果我只指定一个文件扩展名 它就会起作用 例子
  • OpenGraph 还是 Schema.org? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 只是想知道你们是否喜欢遵循以下标记的 OpenGraph 协议 或者 Schema org 协议 div span Kenmore White 17 Mi span div
  • 无法在 Ubuntu 13.04 上使用 RVM 安装 Ruby on Rails

    我正在尝试在我的 Ubuntu 机器上安装 RVM 我已经使用curl来获取RVM 但是一些RVM命令 安装 要求 抛出此apt get错误 There has been error while updating apt get pleas
  • Git-2-SVN 迁移?

    是的 我知道 为什么要从 Git 迁移到 SVN 好吧 我碰巧遇到这样的情况 我需要将一个巨大的 Git 存储库迁移到 Subversion 这是我根据埃德温的评论尝试的一个工作流程 首先创建一个本地SVN仓库 svnadmin creat
  • 通过推送通知启动应用程序时进行调试

    我目前正在开发一个接收推送通知的应用程序 我通过 PHP 页面使这一切 100 正常工作 我的应用程序可以接收多种不同类型的推送通知 PHP 处理这个问题并向我的应用程序发送不同的信息包 这些信息包都被很好地接收 但是 当用户 查看 通知并
  • 在类的构造函数中返回一个值

    到目前为止我有一个PHP带有构造函数的类 public function construct identifier NULL Return me if identifier NULL this gt emailAddress identif
  • 在 C++ 中寻找基于 Windows RAM 的共享内存解决方案

    我面临着一种情况 我需要将多达数百兆字节的内存从一个进程传递到另一个进程 现在我正在通过文件来完成它 但速度太慢了 我想为了更快 这些文件应该直接写入 RAM 并且可以从另一个进程访问 不需要花哨的同步 一个进程将创建共享内存对象并用数据填
  • 内容出现在固定标题后面

    我修复了网站的标题部分 但页面的第一个 div 出现在标题后面 而不是从标题的末尾开始 当您申请时position fixed or position absolute该元素将从文档流中删除 因此后面的元素将其视为不存在 这就是为什么你的d
  • 实体框架 nvarchar 外键区分大小写

    我有相当简单的表结构 如下所示 问题对我来说听起来很奇怪 虽然我选择解决这个问题 但想听取专家的意见 我有两张桌子 Users UserName nvarchar 250 Primary Key FirstName nvarchar 50
  • 为什么 Angular 5 中出现错误:没有导出成员“OpaqueToken”。?

    我有一个 Angular 4 应用程序 我正在将其升级到 Angular 5 我收到以下错误 src app application services generated variables ts 1 10 中出现错误 错误 TS2305
  • 处理控制器中的唯一记录异常

    我有一个名为 Subscription 的模型 它在字段 email location 上有唯一的索引 这意味着每个位置都可以通过一个电子邮件地址进行订阅 在我的模型中 class Subscription lt ActiveRecord
  • Angular 1.2 不再允许在同一元素上使用多个独立作用域指令?

    我在 Angular 项目中有一些代码 它们使用两个具有隔离范围的单独指令 它们不需要共享范围 只需存在于同一元素上即可 它们都以稍微不同的方式改变 DOM 并且重要的是绑定到作为参数传递的值 这在 1 0 中有效 但是 Angular 1
  • 即使“plist”中的“UIBackgroundModes”中存在“voip”,iOS 应用程序在 iOS10 中设备重新启动后也不会自动启动

    我需要我的 VoIP 应用程序在重新启动设备后自动启动 苹果文档明确提到 编辑 这是来自苹果官方文档 请在评论或回答没有用户交互或静默推送通知的情况下无法启动应用程序之前先看一下此内容 另请参阅下面的 Github 项目 人们已经验证了这种
  • 更改按键

    在输入框或 contenteditable true div 中 如何修改字母 a 的按键以返回字母 b 的按键 即 每次在 div 中键入字母 a 时 输出实际上是字母 b 我并不关心在 IE 中工作的解决方案 只是在 Safari Ch
  • 条件语句出现在表达式之前还是之后有什么关系吗?

    抱歉 如果这是一个愚蠢的问题 但我是一个在 ruby 中摸索的 C 人 在 ruby 中 我注意到很多人这样做 do something with params if 1 1 那个和这个之间有什么区别 哪怕是轻微的 if 1 1 do so
  • 在哪里可以找到 .cargo/config?

    我里面没有这个文件c user me cargo 如中所述货物文件 没有one的地方 cargo Cargo 允许对特定项目进行本地配置以及 全局配置 如 git Cargo 将其扩展为层次结构 战略 例如 如果调用 Cargo proje
  • 如何使用TIdIMAP4登录Gmail帐户并获取邮箱中的邮件数量?

    如何登录 Gmail 帐户并获取其中的邮件数量INBOX邮箱与TIdIMAP4成分 要获取 Gmail 收件箱中的邮件总数 您需要首先使用您的凭据连接到 Gmail IMAP 服务器 选择 Gmail 收件箱邮箱 然后为该选定邮箱读取Tot
  • 如何对数据库中的用户使用 Windows 身份验证 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我的主要目标是使用 Windows 身份验证来查询我的自定义用户表以通过 Web 应用程序使用 我不确定是否有常规方法可以做到这一点 我在 SQL 数据库中有一个预定义的用户表和
  • String.Format 计算预期参数的数量

    是否可以计算字符串中预期参数 参数的数量String Format 例如 Hello 0 Bye 1 应返回计数 2 我需要在之前显示错误string Format 抛出异常 感谢您的帮助 您可以使用正则表达式 例如 然后只计算匹配项 如果