using System;
using System.Linq;
using System.Collections.Generic;
using System.Globalization;
using System.Net;
static class Extensions{
public static bool ContainsMoreThan(this string text, int count, string value, StringComparison comparison)
{
if (text == null) throw new ArgumentNullException("text");
if (string.IsNullOrEmpty(value))
return text != "";
int contains = 0;
int index = 0;
while ((index = text.IndexOf(value, index, text.Length - index, comparison)) != -1)
{
if (++contains > count)
return true;
index++;
}
return false;
}
}
public class Test
{
public static void Main()
{
string text = "Lorem ipsum dolor sit amet, quo porro homero dolorem eu, facilisi inciderint ius in.";
bool containsMoreThanOnce = text.ContainsMoreThan(1, "dolor", StringComparison.OrdinalIgnoreCase);
Console.WriteLine("Contains more than once? " + containsMoreThanOnce);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5HbG9iYWxpemF0aW9uOwp1c2luZyBTeXN0ZW0uTmV0OwoKc3RhdGljIGNsYXNzIEV4dGVuc2lvbnN7CiAgICBwdWJsaWMgc3RhdGljIGJvb2wgQ29udGFpbnNNb3JlVGhhbih0aGlzIHN0cmluZyB0ZXh0LCBpbnQgY291bnQsIHN0cmluZyB2YWx1ZSwgIFN0cmluZ0NvbXBhcmlzb24gY29tcGFyaXNvbikKICAgIHsKICAgICAgICBpZiAodGV4dCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKCJ0ZXh0Iik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHZhbHVlKSkKICAgICAgICAgICAgcmV0dXJuIHRleHQgIT0gIiI7CiAgICAKICAgICAgICBpbnQgY29udGFpbnMgPSAwOwogICAgICAgIGludCBpbmRleCA9IDA7CiAgICAKICAgICAgICB3aGlsZSAoKGluZGV4ID0gdGV4dC5JbmRleE9mKHZhbHVlLCBpbmRleCwgdGV4dC5MZW5ndGggLSBpbmRleCwgY29tcGFyaXNvbikpICE9IC0xKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCsrY29udGFpbnMgPiBjb3VudCkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKICAgICAgICAgICAgc3RyaW5nIHRleHQgPSAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIHF1byBwb3JybyBob21lcm8gZG9sb3JlbSBldSwgZmFjaWxpc2kgaW5jaWRlcmludCBpdXMgaW4uIjsKICAgICAgICAgICAgYm9vbCBjb250YWluc01vcmVUaGFuT25jZSA9IHRleHQuQ29udGFpbnNNb3JlVGhhbigxLCAiZG9sb3IiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKTsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkNvbnRhaW5zIG1vcmUgdGhhbiBvbmNlPyAiICsgY29udGFpbnNNb3JlVGhhbk9uY2UpOwoJfSAgIAp9CgogICAgCg==