我想检查字符串中是否包含多个字符? 如果我有一个字符串12121.23.2所以我想检查它是否包含多个。在字符串中。
答案 0 :(得分:18)
您可以将IndexOf
与LastIndexOf
进行比较,以检查string
中是否有多个特定字符,而无需明确计算:
var s = "12121.23.2";
var ch = '.';
if (s.IndexOf(ch) != s.LastIndexOf(ch)) {
...
}
答案 1 :(得分:10)
您可以使用LINQ轻松计算出现的字符数:
string foo = "12121.23.2";
foo.Count(c => c == '.');
答案 2 :(得分:6)
如果表现很重要,请自己写一下:
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'));
我还认为有一个能够准确解释你想要实现的功能的功能更好。但是,您也可以在这样的函数中包装任何其他答案。
答案 3 :(得分:2)
Boolean MoreThanOne(String str, Char c)
{
return str.Count(x => x==c) > 1;
}