如何检查字符串是否包含子字符串的单个出现?

10

我有这个:

string strings = "a b c d d e";

我需要类似于string.Contains()的函数,但我不仅需要知道一个字符串是否存在(在上面的例子中是一个字母),还需要知道它是否仅出现一次。
我该如何实现这个功能?

为什么不使用一个简单的Linq语句来返回出现最多的字符,你可以使用GroupByOrderDescending - MethodMan
可能是在C#中查找字符串中字符出现最多的次数?的重复问题。 - MethodMan
我不认为那是一个重复的问题。 - Colonel Panic
8个回答

20

你可以使用LastIndexOf(String)IndexOf(String)方法,并验证它们返回的值是否相等。当然,也要检查该字符串是否被找到(即返回值不是-1)。


1
实际上,后者只是“IndexOf(String)”而已,没有“First”。 - Jeppe Stig Nielsen

7

您可以使用LINQ

int count = strings.Count(f => f == 'd');

-1 安德鲁,这很好,但条件不应该是硬编码的。 - MethodMan
3
但这仅适用于单个字符。他提到他想要在原始字符串中找到一个完整的字符串。 - jamesmillerio
位元破壞者 - 是的,我錯過了那個。 - Andrew Beal

1
另一个简单的选择:

if(strings.Split(new [] { "a" }, StringSplitOptions.None).Length == 2)

1
一种替代方案。
if(Regex.Matches(input,Regex.Escape(pattern)).Count==1)

0

尝试像下面这样...它会帮助你...

string strings = "a b c d d e";
string text ="a";
int count = 0;
int i = 0;
while ((i = strings.IndexOf(text, i)) != -1)
{
    i += text.Length;
    count++;
}
if(count == 0)
Console.WriteLine("String not Present");

if(count == 1)
Console.WriteLine("String Occured Only one time");

if(Count>1)
Console.WriteLine("String Occurance : " + count.Tostring());

你似乎混淆了stringstext变量。例如,当你说text.IndexOf(text, i)时。请注意,如果搜索字符串存在两个重叠的子字符串,这可能是有趣的。比如在字符串"XXXXXreassureassureXX"中搜索子字符串"reassure",可能希望计算出两个匹配项(问题不清楚)。所以要注意你增加i的数量。同时也要注意i的增量,因为如果超出了strings变量的边界,下一个IndexOf将抛出异常,而不仅仅返回-1 - Jeppe Stig Nielsen
首先,请使用 strings = "a b c d d e"text = "e" 测试您的代码。修复问题后,再使用 strings = "XXXXXreassureassureXX"text = "reassure" 进行测试。在这种情况下,您更喜欢哪个答案? - Jeppe Stig Nielsen

0
    string source = "a b c d d e";
    string search = "d";
    int i = source.IndexOf(search, 0);
    int j = source.IndexOf(search, i + search.Length);
    if (i == -1)
        Console.WriteLine("No match");
    else if (j == -1)
        Console.WriteLine("One match");   
    else
        Console.WriteLine("More match");

0

假设您正在搜索'a'的出现次数,您可以检查数组myString.Split('a')的长度(减1)


您的回答目前表达不明确,请[编辑]以添加更多细节,以帮助他人了解如何解决所提出的问题。您可以在帮助中心中找到有关编写好回答的更多信息。 - Community

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接