2011-12-01 9 views
7

Sto lavorando all'hashing. Sto tagliando una frase e posso usare solo 20 caratteri della frase.Come leggere solo 20 caratteri da una stringa e confrontarli con altre stringhe?

Come posso leggere solo 20 caratteri di una stringa?

Come posso confrontare le stringhe se sono uguali?

+3

"Esempi per manichini consigliati." +1 per la tua onestà! – spender

+5

Se si sta lavorando sull'hashing, perché è necessario troncare la stringa su 20 caratteri? Un algoritmo di hash classico produrrà un risultato con una dimensione fissa, indipendentemente dalla lunghezza dei dati di origine. –

+0

Non so chi accetti! Vi voto tutti per ottime risposte. Devo mescolare e abbinare comunque. – NewHelpNeeder

risposta

9

Per leggere di 20 caratteri di una stringa è possibile utilizzare la metodo di sottostringa. Quindi

myString = myString.Substring(0,20); 

restituirà i primi 20 caratteri. Tuttavia, questo genererà un'eccezione se hai meno di 20 caratteri. Puoi creare un metodo come questo per darti i primi 20, o tutta la stringa se è più corta.

string FirstTwenty(string input){ 
    return input.Length > 20 ? input.Substring(0,20) : input; 
} 

Poi per confrontarli

if(FirstTwenty(myString1).CompareTo(FirstTwenty(myString2)) == 0){ 
    //first twenty chars are the same for these two strings 
} 

In caso di UpperCase quindi utilizzare questa funzione

if (FirstTwenty(mystring1).Equals(FirstTwenty(myString2), StringComparison.InvariantCultureIgnoreCase)) 
    { 
     //first twenty chars are the same for these two strings 
    } 
+2

C# ha anche sovraccarichi dell'operatore, dovresti semplicemente usare' == ' –

4

confrontare una stringa in una stringa:

bool stringsAreEqual = str1 == str2; 

Leggere i primi 20 caratteri da una stringa (il modo molto sicuro):

string first20chars = string.IsNullOrEmpty(str) 
       ? str 
       : str.Length >= 20 
         ? str.Substring(0, 20) 
         : str; 
+0

Perché metti '?:' Sulla nuova stringa, mentre comunemente sono messi sulla stessa stringa? Solo curioso. – abatishchev

+0

@abatishchev: cosa intendi con * nuova stringa *? Controllo solo per null e lunghezza <20 – Jan

+0

Ciao Jan, voglio fare una domanda sul tuo codice. Uso questo tipo di espressione molto frequentemente nei miei codici, ma generalmente uso 'string.IsNullOrWhiteSpace'. Perché lo hai usato? string.IsNullOrEmpty' ma non 'IsNullOrWhiteSpace'? C'è una ragione speciale o qualche differenza tra questi due? – Bastardo

11

questo confronto i primi 20 caratteri della stringa a e b

if (String.Compare(a, 0, b, 0, 20) == 0) 
{ 
    // strings are equal 
} 

per la cultura regole di confronto specifiche si ca n utilizzare questo sovraccarico, che accetta un StringComparison enum:

if (String.Compare(a, 0, b, 0, 20, StringComparison.CurrentCultureIgnoreCase) == 0) 
{ 
    // case insensitive equal 
} 
+5

+1 sovraccarico freddo, non lo so mai prima – sll

+2

Perché manipolare con sottostringa manuale se c'è funzionalità incorporata +1 – dasheddot

+2

+1 Non so nemmeno questo sovraccarico, ed è in realtà piuttosto utile :) –

0

Utilizzare Linq!

if(new string(yourString.Take(20).ToArray()) == otherString.Take(20)) 
    .... 

EDIT Come accennato nei commenti, per modificare l'IEnumerable torna a stringa. Risolto

È possibile farlo solo su enumerables:

if(yourString.Take(20).SequenceEqual(other.AsEnumerable()) 
    .... 

Se si desidera solo per verificare l'inizio delle stringhe:

if(yourString.Take(20).SequenceEqual(other.Take(20)) 
    .... 
+2

Stai facendo l'uguaglianza di riferimento di un 'IEnumerable ' e una' stringa' lì. In questo caso, il compilatore avverte anche: * »avviso CS0252: possibile confronto di riferimento non voluto; per ottenere un confronto di valori, lancia il lato sinistro per digitare 'stringa' «* – Joey

+0

Non ho mai usato Linq per quello. Ma è molto più leggibile che il costrutto restituisca yourString.Length> 20? yourString.SubString (0,20): yourstring; '. +1 –

+0

Che non funziona, 'IEnumerable.Take' restituisce un altro' IEnumerable', che gira '==' in un controllo di uguaglianza di riferimento –

4

Substring in C# classe String restituisce una nuova stringa che è una sottostringa di questa stringa. La sottostringa inizia dall'indice specificato specificato e viene estesa fino alla lunghezza specificata.

str = "This is substring test"; 
retString = str.Substring(5, 7); // "is" 

Nel tuo caso è necessario utilizzare

str.substring(0,20); 

Per confrontare due stringhe che si utilizzano String.Equals()

String a = "Hello"; 
String b = "World"; 
if(a.Equals(b, true)); 

Per ignorare il caso delle corde è necessario utilizzare "vera ".

Problemi correlati