获取替换数量[重复]

Posted

技术标签:

【中文标题】获取替换数量[重复]【英文标题】:Get number of replacements [duplicate] 【发布时间】:2014-12-14 01:15:35 【问题描述】:

有没有使用.Replace("a", "A");获取替换次数的方法?

Example:

String string_1 = "a a a";
String string_2 = string_1.Replace("a", "A"); 

在这种情况下,输出应该是 3,因为 a 被替换为 A 3 次。

【问题讨论】:

【参考方案1】:

您可以使用.Split 函数获取计数:

 string_1.Split(new string[]  "a" , StringSplitOptions.None).Length-1;

拆分字符串后,我们会多得到一项。因为,.Split 函数返回一个字符串数组,其中包含此字符串中由指定字符串数组的元素分隔的子字符串。因此,Length 属性的值将是 n+1

【讨论】:

你为什么把-1放在最后? 长度始终为 (O)1。 msdn.microsoft.com/en-us/library/…【参考方案2】:

您可以使用Regex.Matches 方法找出要替换的内容。如果字符串包含任何会被特别视为正则表达式的字符,请使用Regex.Escape 方法对字符串进行转义。

int cnt = Regex.Matches(string_1, Regex.Escape("a")).Count;

【讨论】:

【参考方案3】:

您不能直接使用 string.Replace 执行此操作,但您可以使用 string.IndexOf 搜索您的字符串,直到找不到匹配项

int counter = 0;
int startIndex = -1;
string string_1 = "a a a";
while((startIndex = (string_1.IndexOf("a", startIndex + 1))) != -1)
    counter++;
Console.WriteLine(counter);

如果这变得经常使用,那么您可以计划创建一个extension method

public static class StringExtensions

     public static int CountMatches(this string source, string searchText)
     

        if(string.IsNullOrWhiteSpace(source) || string.IsNullOrWhiteSpace(searchText))
           return 0;

         int counter = 0;
         int startIndex = -1;
         while((startIndex = (source.IndexOf(searchText, startIndex + 1))) != -1)
             counter++;
         return counter;
     

并调用它

int count = string_1.CountMatches("a");

IndexOf 的优点在于您不需要创建字符串数组 (Split) 或对象数组 (Regex.Matches)。这只是一个涉及整数的普通循环。

【讨论】:

以上是关于获取替换数量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过特定日期的唯一客户和重复客户获取每天的客户数量?

Python:如何获取 GPU 的数量 [重复]

获取具有特定数量的重复值的行

从JSON中获取重复的对象键的值,并只用一个键替换返回。

如何使用 JAVA API 从 Kafka 获取每个主题的消息数量 [重复]

在Oracle的SQL查询中获取固定数量的行[重复]