none
¿Cómo puedo saber si una cadena tiene un caracter en particular? RRS feed

  • Pregunta

  • Explico, tengo un código de 5 caracteres de longitud que está inicializado con ceros cuya comparación la hago en varios puntos para saber si está inicializado, algo así:

    If Codigo = "00000" Then

          'Inicializado

    Endif

    Pero resulta que la longitud de dicho código podría cambiar y ya no ser cinco y entonces en todos los puntos donde aparezca tendría que cambiar la cantidad de ceros.

    La consulta es si hay alguna forma de saber si la cadena contiene puros ceros, sin tener en cuenta la longitud de esta, o sea que devuelva el mismo resultado si es "00000" o si es "0000000000000000000000000000", así, si posteriormente cambia ya no tendría que modificar  todos los puntos anteriores.



    sábado, 7 de enero de 2017 0:19

Respuestas

  • Hola James2016-2,

    No sé si te entendí bien, pero podrías usar la función Replace() para reemplazar el '0' por un vacío, y luego usando la propiedad Length verificas el resultado, si es 0 es porque todos los valores eran ceros.

    Dim Codigo As String = "0000000000000"
    
    If Codigo.Replace("0", "").Length = 0 Then
    
        'Inicializado
        MessageBox.Show("Son todos ceros.")
    Else
        MessageBox.Show("El código tiene otros valores ...")
    End If


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James2016-2 sábado, 7 de enero de 2017 1:00
    sábado, 7 de enero de 2017 0:32
  • James2016-2,

    Ya que andas buscando ahorrar todo coste en tú código permiteme hacerte una observación:

    Un String es un tipo inmutable (concepto que indica en términos simples que no puede ser modificado luego de su creación), por tanto, lo que hace el método Replace es crear un nuevo objeto String conteniendo una nueva cadena con los reemplazos realizados, (si quisieras dicha copia podrías asignarla al objeto origen considerando que se trata de un tipo por referencia), pero,  ¿por qué quisieras crear un nuevo objeto para fines de comparación?.

    Puedes encontrar muchas otras maneras de realizar lo que requieres, por ejemplo, si la cadena contiene sólo valores numéricos quizá baste convertir a un tipo numérico y validar si es igual a cero (claro, siempre y cuando el rango permitido por el tipo incluya la representación de la cadena) o podrías utilizar el método Sum() para calcular la suma de la secuencia, siempre y cuando el código contenga únicamente caracteres numéricos que sospecho es así: 

    Dim Codigo As String = "000000000000000"
    
    If Codigo.Sum(Function(c) Val(c)) = 0 Then
    	MessageBox.Show("La cadena contiene sólo ceros")
    Else
    	MessageBox.Show("La cadena contiene por lo menos un dígito distinto a cero")
    End If


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James2016-2 sábado, 7 de enero de 2017 19:53
    sábado, 7 de enero de 2017 17:53

Todas las respuestas

  • Hola James2016-2,

    No sé si te entendí bien, pero podrías usar la función Replace() para reemplazar el '0' por un vacío, y luego usando la propiedad Length verificas el resultado, si es 0 es porque todos los valores eran ceros.

    Dim Codigo As String = "0000000000000"
    
    If Codigo.Replace("0", "").Length = 0 Then
    
        'Inicializado
        MessageBox.Show("Son todos ceros.")
    Else
        MessageBox.Show("El código tiene otros valores ...")
    End If


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James2016-2 sábado, 7 de enero de 2017 1:00
    sábado, 7 de enero de 2017 0:32
  • Sí, eso es lo que intento, una forma de saber si todos los caracteres de la cadena son cero. Gracias.
    sábado, 7 de enero de 2017 1:00
  • James2016-2,

    Ya que andas buscando ahorrar todo coste en tú código permiteme hacerte una observación:

    Un String es un tipo inmutable (concepto que indica en términos simples que no puede ser modificado luego de su creación), por tanto, lo que hace el método Replace es crear un nuevo objeto String conteniendo una nueva cadena con los reemplazos realizados, (si quisieras dicha copia podrías asignarla al objeto origen considerando que se trata de un tipo por referencia), pero,  ¿por qué quisieras crear un nuevo objeto para fines de comparación?.

    Puedes encontrar muchas otras maneras de realizar lo que requieres, por ejemplo, si la cadena contiene sólo valores numéricos quizá baste convertir a un tipo numérico y validar si es igual a cero (claro, siempre y cuando el rango permitido por el tipo incluya la representación de la cadena) o podrías utilizar el método Sum() para calcular la suma de la secuencia, siempre y cuando el código contenga únicamente caracteres numéricos que sospecho es así: 

    Dim Codigo As String = "000000000000000"
    
    If Codigo.Sum(Function(c) Val(c)) = 0 Then
    	MessageBox.Show("La cadena contiene sólo ceros")
    Else
    	MessageBox.Show("La cadena contiene por lo menos un dígito distinto a cero")
    End If


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta James2016-2 sábado, 7 de enero de 2017 19:53
    sábado, 7 de enero de 2017 17:53
  • Hola, entiendo lo que dices, la alternativa que propones no vuelve a generar otra cadena, preguntaba pensando que a lo mejor vb.net tenía una función específica para eso, veo que no, sin embargo hay varias alternativas, la que dices de convertir el código a numérico y compararlo con 0 también me parece bastante directa, claro teniendo en consideración que no se pase del rango. Gracias por la respuesta.
    • Editado James2016-2 sábado, 7 de enero de 2017 19:54
    sábado, 7 de enero de 2017 19:53