获取替换数量

时间:2014-10-18 16:51:55

标签: c# .net string replace numbers

是否有方法可以使用.Replace("a", "A");来获取替换次数?

Example:

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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)。它只是一个涉及整数的普通香草循环。

答案 2 :(得分:1)

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

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