none
comparar dos cadenas con .net RRS feed

  • Pregunta

  • saludos, como puedo comparar dos cadenas en .net que pueden estar escritas con mayúsculas y minúsculas con tildes y sin tildes y con diferente espaciado entre palabras

      string s1="Ingeniería de Sistemas";
      string s2="INGENIERIA DE   SISTEMAS ";

    en estas dos cadenas dice lo mismo

    como puedo compararlo.

    martes, 26 de diciembre de 2017 15:16

Respuestas

  • hola

    podrias usar

    if(s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase)){
    
      //codigo
    
    }

    con esto comparas iguanorando las mayusculas o minusculas

    ahora bien alli veo que una de las cadenas lleva acento, esto hara que no sean iguales

    los espacios podrias quitarlos con con el metodo Replace()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Augusto C martes, 26 de diciembre de 2017 20:36
    martes, 26 de diciembre de 2017 15:25

Todas las respuestas

  • Hola:

     el método Equals de la clase string podría serte de utilidad


    Saludos desde Monterrey, Nuevo León, México!!!

    martes, 26 de diciembre de 2017 15:25
  • hola

    podrias usar

    if(s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase)){
    
      //codigo
    
    }

    con esto comparas iguanorando las mayusculas o minusculas

    ahora bien alli veo que una de las cadenas lleva acento, esto hara que no sean iguales

    los espacios podrias quitarlos con con el metodo Replace()

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Augusto C martes, 26 de diciembre de 2017 20:36
    martes, 26 de diciembre de 2017 15:25
  • Hola, con esto lo puedes comparar:

    int rcomp;
    			string s1="Ingeniería de Sistemas";
      			string s2="INGENIERIA DE   SISTEMAS ";
      			CompareInfo comp = CultureInfo.InvariantCulture.CompareInfo;
      			comp = CompareInfo.GetCompareInfo("es-ES");
      			CompareOptions copt = CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols;
      			rcomp = comp.Compare(s1, s2, copt);
      			MessageBox.Show(rcomp.ToString());

    Debes agregar using System.Globalization;

    si el resultado de rcomp = 0 significa que las dos cadenas son iguales con los criterios de comparación seleccionados.

    Para ver mas sobre estos criterios: CompareOptions Enumeration

    Espero te sirva, comentá. Saludos.-

    martes, 26 de diciembre de 2017 15:45
  • Sugiero ocupar el método String.Compare() para evaluar la relación de las dos instancias de tipo String, por ejemplo:

    string s1 = "Ingeniería de Sistemas";
    string s2 = "INGENIERIA DE   SISTEMAS ";
    
    if (string.Compare(Regex.Replace(s1, @"\s+", ""), Regex.Replace(s2, @"\s+", ""), 
    	CultureInfo.CurrentCulture,
            CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase) == 0)
    {
    	MessageBox.Show("Ambas cadenas son iguales...");
    }

    martes, 26 de diciembre de 2017 15:51
  • Mucho cuidado con la opción de comparación 'IgnoreSymbol', si bien discrimina los espacios en blanco también lo hace con otros caracteres, como los signos de puntuación, que podría otorgar un significado distinto a la cadena. Por ejemplo, el método resolverá como 0 (igualdad) la evaluación de las cadenas "c#" y "c++".
    martes, 26 de diciembre de 2017 16:00