2013-04-16 15 views
5

Mam sytuację, w której muszę spróbować odfiltrować fałszywe numery SSN. Z tego, co widziałem do tej pory, jeśli są fałszywe, wszystkie są takie same lub 123456789. Mogę filtrować do ostatniego, ale czy istnieje łatwy sposób na sprawdzenie, czy wszystkie znaki są takie same?C# określić, czy wszystkie znaki w ciągu są takie same

+1

s = null && s.Length> 1 && s [s.Length - 1] == s [0] – Jay

+0

wystarczy użyć pierwszego znaku w łańcuchu i skorzystać z odpowiedzi na to poprzednie pytanie liczyć liczba wystąpień: http://stackoverflow.com/questions/10391481/number-of-occurrences-of-a-character-in-a-string – JeffO

+0

Ile razy problem będzie występował w innych miejscach? W razie potrzeby kompensowana przez niepewność wymagana ... – Jay

Odpowiedz

34

powrotu (SSN. Distinct() .Count() == 1)

+7

Wierzę, że masz na myśli 'ssn.Distinct(). Count()' – Aron

+0

Świetnie, wykorzystuje LINQ. –

+0

naprawione za @ poprawkę Arona – AShelly

1

Złap pierwszą postać i zapętl.

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

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

return true; 

oczywiście należy również sprawdzić długość ssn

+0

Łańcuch ma wartość null to zerwanie: p – Jay

+0

Ya .. Pusty ciąg również to przerwać. PO powinien zająć się tym problemem. –

5

Ta metoda powinna załatwić sprawę:

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

Objaśnienie: jeśli długość ciąg jest 0, to oczywiście wszystkie znaki są takie podobnie. W przeciwnym razie znaki łańcucha są takie same, jeśli wszystkie są równe pierwszemu.

+0

Co jeśli jest to tylko 1 znak długości: P – Jay

+0

@Jay Ciąg 1-znakowy ma wszystkie takie same znaki, więc ogólny "dowiedzieć się, czy znaki tego łańcucha są takie same" powinna zwrócić "true". –

+0

No null check ... – Jay

3

Aby gid pozbyć się tego problemu, ponieważ mówimy o SSN. Możesz sprawdzić i użyć projektu demo CodeProject w celu sprawdzenia poprawności numeru SSN. Chociaż jest to w VB.Net, myślę, że możesz wymyślić ten sam pomysł. !

+0

Kodowanie ograniczeń tutaj jest prawdopodobnie lepszym rozwiązaniem niż jakikolwiek filtr, który wymyślisz. – AShelly

+0

, ale jak sprawdziłbyś numer SSN, gdyby podane wartości były fałszywe? na przykład 123456798? Istnieje szereg reguł, które musimy wdrożyć przy naszej walidacji. Sprawdzenie, czy wszystkie znaki są takie same, nie wystarczyłoby, aby było wiarygodne. – lexeRoy

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

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