我想检查一个字符串中是否含有多个相同的字符。例如,如果我有一个字符串 12121.23.2 ,我想检查它是否包含多个 "."。
我想检查一个字符串中是否含有多个相同的字符。例如,如果我有一个字符串 12121.23.2 ,我想检查它是否包含多个 "."。
你可以将IndexOf
和LastIndexOf
进行比较,以检查一个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;
}
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;
}