文字列内の部分文字列を検索するには、contains()
関数を使用できます。しかし、文字列に部分文字列が複数回含まれているかどうかを確認するにはどうすればよいでしょうか?
それを最適化するには: 私にとっては、結果の数ではなく、複数の結果があることを知っていれば十分です。
IndexOf
高速メソッドと文字列メソッドを活用してみてくださいLastIndexOf
。次のコード スニペットを使用します。アイデアは、最初と最後のインデックスが異なるかどうか、および最初のインデックスが -1 でないかどうかを確認することです。これは、文字列が存在することを意味します。
string s = "tytyt";
var firstIndex = s.IndexOf("tyt");
var result = firstIndex != s.LastIndexOf("tyt") && firstIndex != -1;
正規表現を使用した 1 行のコード:
return Regex.Matches(myString, "test").Count > 1;
を使用する次の拡張メソッドを使用できますstring.IndexOf
。
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;
}
次の方法で使用します。
string text = "Lorem ipsum dolor sit amet, quo porro homero dolorem eu, facilisi inciderint ius in.";
bool containsMoreThanOnce = text.ContainsMoreThan(1, "dolor", StringComparison.OrdinalIgnoreCase); // true
これは文字列拡張子でありcount
、 、value
検索する文字列、およびStringComparison
(大文字と小文字を区別しないで検索するなど) を渡すことができます。
Regex クラスを使用することもできます。msdn 正規表現
int count;
Regex regex = new Regex("your search pattern", RegexOptions.IgnoreCase);
MatchCollection matches = regex.Matches("your string");
count = matches.Count;
private bool MoreThanOnce(string full, string part)
{
var first = full.IndexOf(part);
return first!=-1 && first != full.LastIndexOf(part);
}