【问题标题】:Determine if all characters in a string are the same确定字符串中的所有字符是否相同
【发布时间】:2013-04-08 07:02:10
【问题描述】:

我有一种情况,我需要尝试过滤掉虚假的 SSN 号码。从我目前看到的情况来看,如果它们是假的,它们都是相同的数字或 123456789。我可以过滤最后一个,但是有没有简单的方法来确定所有字符是否相同?

【问题讨论】:

  • s != null && s.Length > 1 && s[s.Length - 1] == s[0]
  • 只需使用字符串中的第一个字符并使用上一个问题的答案来计算出现次数:stackoverflow.com/questions/10391481/…
  • 其他地方会出现多少次问题?如果需要抵消所需的不确定性...

标签: c# string contains


【解决方案1】:

抓取第一个字符,然后循环。

var ssn = "222222222";
var fc = ssn[0];

for(int i=0; i<ssn.Length; i++)
{
    if(ssn[i]!=fc)
        return false;
}

return true;

当然你也应该检查ssn的长度

【讨论】:

  • 字符串为空,这会中断:p
  • Ya.. 空字符串也打破了这一点。 OP 应该注意这个问题。
  • 另外,如果 for 循环从第二个字符开始会更好,因为用它自己检查第一个字符是没有意义的。
【解决方案2】:

这个方法应该可以解决问题:

public static bool AreAllCharactersSame(string s)
{
    return s.Length == 0 || s.All(ch => ch == s[0]);
}

解释:如果一个字符串的长度是0,那么当然所有的字符都是一样的。否则,如果字符串的所有字符都等于第一个字符,则它们都是相同的。

【讨论】:

  • 如果它只有 1 个字符怎么办:P
  • @Jay 1 个字符的字符串具有所有相同的字符,因此一般的“找出该字符串的字符是否相同”方法应返回 true
【解决方案3】:

返回 (ssn.Distinct().Count() == 1)

【讨论】:

  • 我相信你的意思是ssn.Distinct().Count()
【解决方案4】:

为了摆脱这个问题,因为我们正在谈论 SSN。您可以查看并使用this CodeProject 演示项目来验证 SSN。虽然这是在 VB.Net 中,但我想您可以提出相同的想法。

【讨论】:

  • 在这里编写限制可能是比您想出的任何过滤器更好的解决方案。
  • 但是如果输入的值是假的,你将如何验证 SSN?例如 123456798?我们需要通过验证来实施许多规则。检查所有字符是否相同不足以使其可靠。
【解决方案5】:
char[] chrAry = inputStr.ToCharArray();
char first = chrAry[0];

var recordSet = from p in chrAry where p != first select p;
return !recordSet.Any();

【讨论】:

    【解决方案6】:

    您对此有何看法:

    "jhfbgsdjkhgkldhfbhsdfjkgh".Distinct().Skip(1).Any()
    

    为了避免计算字符的整数?你应该在 null 或 empty 之前检查。

    【讨论】:

      猜你喜欢
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 2011-06-26
      相关资源
      最近更新 更多