Get number of replacements [duplicate]

微笑、不失礼 提交于 2019-12-11 09:14:58

问题


Is there a method to get the number of replacements using .Replace("a", "A"); ?

Example:

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

In this case, the output should be 3, because a was replaced with A 3 times.


回答1:


You can get the count using .Split function :

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

After splitting the string we will get one item more. Because, .Split function returns a string array that contains the substrings in this string that are delimited by elements of a specified string array. So, the Length property's value will be n+1.




回答2:


You cannot do this directly with string.Replace, but you could use the string.IndexOf to search for your string until it doesn't find a match

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);

If this becomes of frequent use then you could plan to create an 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;
     }
}

and call it with

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

The advantages of IndexOf are in the fact that you don't need to create an array of strings (Split) or an array of objects (Regex.Matches). It is just a plain vanilla loop involving integers.




回答3:


You can use the Regex.Matches method to find out what would be replaced. Use the Regex.Escape method to escape the string if it would contain any characters that would be treated specially as a regular expression.

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


来源:https://stackoverflow.com/questions/26442221/get-number-of-replacements

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!