如何识别字符串是否包含特定字符的多个实例

本文关键字:字符 实例 包含特 是否 何识别 识别 字符串 | 更新日期: 2023-09-27 18:21:12

我想检查字符串中是否包含多个字符?如果我有一个字符串12121.23.2,所以我想检查它是否包含多个。在字符串中。

如何识别字符串是否包含特定字符的多个实例

您可以比较IndexOfLastIndexOf,以检查string中是否有多个特定字符,而无需显式计数:

var s = "12121.23.2";
var ch = '.';
if (s.IndexOf(ch) != s.LastIndexOf(ch)) {
    ...
}

使用LINQ:可以轻松计算字符的出现次数

string foo = "12121.23.2";
foo.Count(c => c == '.');

如果性能很重要,请自己编写:

public static bool ContainsDuplicateCharacter(this string s, char c)
{
    bool seenFirst = false;
    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] != c)
            continue;
        if (seenFirst)
            return true;
        seenFirst = true;
    }
    return false;
}

通过这种方式,您只需要对字符串的内容进行一次遍历,并尽可能早地退出。在最坏的情况下,您只访问所有字符一次。在@dasblinkenlight的回答中,你会访问所有字符两次,在@mensi的回答中你必须计算所有实例,即使一旦有两个实例,你就可以停止计算。此外,使用Count扩展方法涉及使用Enumerable<char>,其运行速度将比直接访问特定索引处的字符慢。

然后你可以写:

string s = "12121.23.2";
Debug.Assert(s.ContainsDuplicateCharacter('.'));
Debug.Assert(s.ContainsDuplicateCharacter('1'));
Debug.Assert(s.ContainsDuplicateCharacter('2'));
Debug.Assert(!s.ContainsDuplicateCharacter('3'));
Debug.Assert(!s.ContainsDuplicateCharacter('Z'));

我还认为,最好有一个功能来准确解释你想要实现的目标。然而,您也可以将任何其他答案封装在这样的函数中。

Boolean MoreThanOne(String str, Char c)
{
    return str.Count(x => x==c) > 1;
}