7

文字列内の部分文字列を検索するには、contains()関数を使用できます。しかし、文字列に部分文字列が複数回含まれているかどうかを確認するにはどうすればよいでしょうか?

それを最適化するには: 私にとっては、結果の数ではなく、複数の結果があることを知っていれば十分です。

4

5 に答える 5

16

IndexOf高速メソッドと文字列メソッドを活用してみてくださいLastIndexOf。次のコード スニペットを使用します。アイデアは、最初と最後のインデックスが異なるかどうか、および最初のインデックスが -1 でないかどうかを確認することです。これは、文字列が存在することを意味します。

string s = "tytyt";

var firstIndex = s.IndexOf("tyt");

var result = firstIndex != s.LastIndexOf("tyt") && firstIndex != -1;
于 2013-02-20T16:34:55.910 に答える
6

正規表現を使用した 1 行のコード:

return Regex.Matches(myString, "test").Count > 1;
于 2016-08-05T03:47:17.427 に答える
3

を使用する次の拡張メソッドを使用できます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(大文字と小文字を区別しないで検索するなど) を渡すことができます。

于 2013-02-20T16:36:39.220 に答える
3

Regex クラスを使用することもできます。msdn 正規表現

   int count;
   Regex regex = new Regex("your search pattern", RegexOptions.IgnoreCase);
   MatchCollection matches = regex.Matches("your string");
   count = matches.Count;
于 2013-02-20T16:41:17.130 に答える
2
private bool MoreThanOnce(string full, string part)
{
   var first = full.IndexOf(part);
   return first!=-1 && first != full.LastIndexOf(part);
}
于 2013-02-20T16:37:04.353 に答える