c#if String包含2“hallo”

c# if String Contains 2 “hallo”

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How would you count occurences of a string within a string (C#)?

我想检查一个字符串是否包含两个内容。

1
2
3
String hello ="hellohelloaklsdhas";

if hello.Contains(*hello 2 Times*); -> True

我怎么解决这个问题?


您可以使用regex:)

1
return Regex.Matches(hello,"hello").Count == 2;

这与模式"hello"的字符串hello匹配,如果计数为2,则返回true。


正则表达式。

1
if (Regex.IsMatch(hello,@"(.*hello.*){2,}"))

我猜你的意思是"你好",这将匹配一个字符串至少有2个"你好"(不完全是2个"你好")。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static class StringExtensions
{
    public static int Matches(this string text, string pattern)
    {
        int count = 0, i = 0;
        while ((i = text.IndexOf(pattern, i)) != -1)
        {
            i += pattern.Length;
            count++;
        }
        return count;
    }
}

class Program
{
    static void Main()
    {
        string s1 ="Sam's first name is Sam.";
        string s2 ="Dot Net Perls is about Dot Net";
        string s3 ="No duplicates here";
        string s4 ="aaaa";

        Console.WriteLine(s1.Matches("Sam"));  // 2
        Console.WriteLine(s1.Matches("cool")); // 0
        Console.WriteLine(s2.Matches("Dot"));  // 2
        Console.WriteLine(s2.Matches("Net"));  // 2
        Console.WriteLine(s3.Matches("here")); // 1
        Console.WriteLine(s3.Matches(""));    // 2
        Console.WriteLine(s4.Matches("aa"));   // 2
    }
}

IndexOf:

1
2
3
4
5
6
7
8
9
10
int FirstIndex = str.IndexOf("hello");
int SecondIndex = str.IndexOf("hello", FirstIndex + 1);
if(FirstIndex != -1 && SecondIndex != -1)
{
  //contains 2 or more hello
}
else
{
   //contains not
}

或者如果你想要2:if(FirstIndex != -1 && SecondIndex != -1 && str.IndexOf("hello", SecondIndex) == -1)


索引

可以使用IndexOf方法获取某个字符串的索引。此方法有一个重载,它接受从何处开始的起点。当找不到指定的字符串时,返回-1

下面是一个应该说明问题的例子。

1
2
3
4
5
6
7
8
9
10
var theString ="hello hello bye hello";
int index = -1;
int helloCount = 0;

while((index = theString.IndexOf("hello", index+1)) != -1)
{
    helloCount++;
}

return helloCount==2;

正则表达式

另一种获得计数的方法是使用regex:

1
return (Regex.Matches(hello,"hello").Count == 2);

如果使用正则表达式matchCollection,则可以轻松获得:

1
2
3
4
5
6
MatchCollection matches;

Regex reg = new Regex("hello");

matches = reg.Matches("hellohelloaklsdhas");
return (matches.Count == 2);


new Regex("hello.*hello").IsMatch(hello)

Regex.IsMatch(hello,"hello.*hello")


您可以使用regex,并检查matches函数结果的长度。如果是两个,你就赢了。