关于c#:获取替换次数

Get number of replacements

本问题已经有最佳答案,请猛点这里访问。

有没有一种方法可以使用.Replace("a","A");来获取替换的数量?

1
2
3
4
Example:

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

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


不能直接用string.replace执行此操作,但可以使用string.indexof搜索字符串,直到它找不到匹配项为止。

1
2
3
4
5
6
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);

如果这变得经常使用,那么您可以计划创建一个扩展方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
     }
}

然后打电话给

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

indexof的优点在于不需要创建字符串数组(split)或对象数组(regex.matches)。它只是一个包含整数的普通循环。


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

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

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


您可以使用Regex.Matches方法查找将要替换的内容。如果字符串包含任何将被特殊视为正则表达式的字符,则使用Regex.Escape方法来转义该字符串。

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