das*_*ght 18
您可以比较IndexOf以LastIndexOf检查在string没有显式计数的情况下是否存在多个特定字符:
var s = "12121.23.2";
var ch = '.';
if (s.IndexOf(ch) != s.LastIndexOf(ch)) {
...
}
Run Code Online (Sandbox Code Playgroud)
men*_*nsi 10
您可以使用LINQ轻松计算角色的出现次数:
string foo = "12121.23.2";
foo.Count(c => c == '.');
Run Code Online (Sandbox Code Playgroud)
如果性能很重要,请自行编写:
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;
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,你只需要通过字符串的内容,然后尽早拯救.在最坏的情况下,您只访问所有字符一次.在@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'));
Run Code Online (Sandbox Code Playgroud)
我还认为拥有一个能够准确解释您想要实现的功能的功能更为出色.但是,你也可以在这样的函数中包装任何其他答案.
| 归档时间: |
|
| 查看次数: |
12881 次 |
| 最近记录: |