2013-04-16 161 views
5

我有一種情況,我需要嘗試並過濾掉僞造的SSN號碼。從我目前看到的,如果他們是假的,他們都是相同的數字或123456789.我可以過濾最後一個,但有一個簡單的方法來確定是否所有的角色是相同的?C#確定字符串中的所有字符是否相同

+1

S =空&& s.Length> 1個&& S [s.Length - 1] == S [0] – Jay

+0

只需使用字符串中的第一個字符,並使用回答這個問題之前的數發生次數:http://stackoverflow.com/questions/10391481/number-of-occurrences-of-a-character-in-a-string – JeffO

+0

問題在其他地方會發生多少次?如果需要偏移所需的不確定性... – Jay

回答

34

回報(SSN。Distinct() .Count中()== 1)

+7

我相信你的意思是'ssn.Distinct()。Count()' – Aron

+0

好,它利用LINQ。 –

+0

固定每@亞倫的更正 – AShelly

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

+0

字符串爲null這個中斷:p – Jay

+0

雅..空字符串也打破這個。 OP應該注意這個問題。 –

5

長度此方法應該做的伎倆:

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

說明:如果一個字符串的長度爲0,那麼當然,所有字符是相同。否則,如果字符串的所有字符都與第一個字符相同,則它們都是相同的。

+0

如果長度只有1個字符,該怎麼辦:P – Jay

+0

@Jay 1個字符的字符串具有全部相同的字符,因此一般「找出該字符串的字符是否都是相同的」方法應該返回「true」。 –

+0

No null check ... – Jay

3

要GID擺脫這個問題,因爲我們是在談論SSN。您可以檢查並使用this CodeProject演示項目來驗證SSN。雖然這是在VB.Net,我想你可以想出相同的想法。 !

+0

對這裏的限制進行編碼可能是比您想象的任何過濾器更好的解決方案。 – AShelly

+0

但是如果輸入的值是假的,你將如何驗證SSN?例如123456798?我們需要通過驗證實施多項規則。檢查所有字符是否相同不足以使其可靠。 – lexeRoy

1
char[] chrAry = inputStr.ToCharArray(); 
char first = chrAry[0]; 

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