我想算一下,我在字符串变量中有\r\r
的频率。
例如:
string sampleString = "9zogl22n\r\r\nv4bv79gy\r\r\nkaz73ji8\r\r\nxw0w91qq\r\r\ns05jxqxx\r\r\nw08qsxh0\r\r\nuyggbaec\r\r\nu2izr6y6\r\r\n106iha5t\r";
结果将在此示例中为8。
答案 0 :(得分:6)
您可以使用正则表达式:
var res = Regex.Matches(s, "\r\r").Count;
或者在字符串上循环:
var res = 0;
for (int i = 0; i < str.Length - 1; i++)
if(s[i] == '\r' && s[i + 1] == '\r')
res++;
答案 1 :(得分:1)
试试这个方法:
public static int CountStringOccurrences(this string text, string pattern)
{
int count = 0;
int i = 0;
while ((i = text.IndexOf(pattern, i)) != -1)
{
i += pattern.Length;
count++;
}
return count;
}
用法:
int doubleLinefeedCount = sampleString.CountStringOccurrences("\r\r");
答案 2 :(得分:0)
您可以使用LINQ选择\r\r
开始的所有位置并计算它们:
Enumerable.Range(0, s.Length).Where(idx => s.IndexOf(@"\r\r", idx)==idx).Count();
请注意,"\r\r\r"
将在上面的代码中返回2 ...
答案 3 :(得分:0)
您可以使用查找字符串\ r \ n \ r \ n分割字符串的技巧: (这不是很有效_我们需要分配2个字符串数组_但我将其作为一种可能的解决方案发布,特别是如果您感兴趣的是分开的令牌)
"9zogl22n\r\r\nv4bv79gy\r\r\nkaz73ji8\r\r\nxw0w91qq\r\r\ns05jxqxx\r\r\nw08qsxh0\r\r\nuyggbaec\r\r\nu2izr6y6\r\r\n106iha5t\r".Split(new string[] {"\r\r"}, StringSplitOptions.None).Length - 1)
答案 4 :(得分:-1)
您可以为此编写一个简单的扩展方法:
public static int LineFeedCount(this string source)
{
var chars = source.ToCharArray();
bool found = false;
int counter = 0;
int count = 0;
foreach(var ch in chars)
{
if (ch == '\r') found = true;
else found = false;
if (found) counter++;
else counter = 0;
if(counter != 0 && counter%2 == 0) count++;
}
return count;
}
然后使用它:
int count = inputString.LineFeedCount();