2011-12-01 14 views
7

Estoy trabajando en hash. Estoy escribiendo una frase y solo puedo usar 20 caracteres de la frase.¿Cómo se pueden leer solo 20 caracteres de una cadena y compararlos con otra cadena?

¿Cómo puedo leer solo 20 caracteres de una cadena?

¿Cómo puedo comparar cadenas si son las mismas?

+3

"Se recomiendan los ejemplos para los maniquíes". +1 por su honestidad! – spender

+5

Si está trabajando en hashing, ¿por qué necesita truncar la cadena a 20 caracteres? Un algoritmo Hash clásico producirá un resultado con un tamaño fijo, cualquiera que sea la longitud de los datos fuente. –

+0

¡No sé quién acepta! Les voto a todos por muy buenas respuestas. Sin embargo, debo mezclar y combinar. – NewHelpNeeder

Respuesta

9

Para leer 20 caracteres de una cadena se puede utilizar el método de subcadena Entonces

myString = myString.Substring(0,20); 

devolverá los primeros 20 caracteres. Sin embargo, esto lanzará una excepción si tiene menos de 20 caracteres. Puedes hacer un método como este para darte los primeros 20 o toda la cadena si es más corto.

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

Luego compararlos

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

En caso de funciones UpperCase después use esta función

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

C# también tiene sobrecargas de operador, solo debe usar' == ' –

4

comparar una cadena en una cadena:

bool stringsAreEqual = str1 == str2; 

Leer los primeros 20 caracteres de una cadena (manera muy segura):

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

¿Por qué pones '?:' En una nueva cadena, mientras que comúnmente se ponen en la misma cadena? Sólo curioso. – abatishchev

+0

@abatishchev: ¿qué quieres decir con * nueva cadena *? Solo compruebo null y longitud <20 – Jan

+0

Hola Jan, quiero hacerte una pregunta sobre tu código. Estoy usando este tipo de expresión con mucha frecuencia en mis códigos, pero generalmente uso 'string.IsNullOrWhiteSpace'. ¿Por qué usaste' string.IsNullOrEmpty' pero no 'IsNullOrWhiteSpace'? ¿Hay alguna razón especial o alguna diferencia entre estos dos? – Bastardo

11

esto se compara los primeros 20 caracteres de la cadena a y b

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

para la cultura reglas específicas de comparación que ca n usar esta sobrecarga, que acepta un StringComparison enum:

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

+1 sobrecarga fresca, nunca se sabe antes de – sll

+2

¿Por qué juguetear con subcadena manualmente si hay funcionalidad incorporada +1 – dasheddot

+2

+1 No sabía sobre esta sobrecarga tampoco, y en realidad es bastante útil :) –

0

Use Linq!

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

EDITAR Como se ha mencionado en los comentarios, para cambiar el IEnumerable de nuevo a cadena. Fijo

Usted puede hacer esto en sólo enumerables:

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

Si sólo desea comprobar el inicio de las cuerdas:

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

Está haciendo la igualdad de referencia de un 'IEnumerable 'y una' cadena 'allí. El compilador incluso advierte en ese caso: * »advertencia CS0252: posible comparación de referencia involuntaria; para obtener una comparación de valores, echa el lado izquierdo para escribir 'string' «* – Joey

+0

Nunca utilicé Linq para eso. Pero es mucho más legible que la construcción 'return yourString.Length> 20? yourString.SubString (0,20): yourstring; '. +1 –

+0

Eso no funcionará, 'IEnumerable.Take' devuelve otro' IEnumerable', que convertirá ese '==' en una verificación de igualdad de referencia –

4

Subcadena en C Clase # cadena devuelve una nueva cadena que es una subcadena de esta cadena. La subcadena comienza en el índice especificado especificado y se extiende hasta la longitud dada.

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

En su caso, deberá utilizar

str.substring(0,20); 

Para comparar dos cadenas que utiliza String.Equals()

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

Ignorar el caso de las cadenas debe utilizar "verdadero ".

Cuestiones relacionadas