Tengo una aplicación con un EditText y un botón denominado «hacia adelante». Todo lo que quiero es justo cuando yo tipo «a» en el EditText y haga clic en el botón, la palabra «b» para ser escrito en el EditText, «c» si se pulsa de nuevo y así sucesivamente. He intentado:

value = edt.getText();
edt.setText(value + 1);

Pero que por supuesto va a imprimir la cadena inicial, seguido por el número «1». Alguna idea? Muchas gracias

6 Comentarios

  1. 23

    Probado y funciona

    Todas las cartas pueden ser representados por sus ASCII valores.

    Si puedes lanzar las cartas a un int, agregar 1 y, a continuación, la parte posterior del elenco para una char, la carta se incrementará en 1 el valor ASCII (la letra siguiente).

    Por ejemplo:

    'a' es 97

    'b' es 98

    Así que si la entrada se 'a' y escayola que a un int, obtendría 97. A continuación, agregue 1 y obtener 98, y, finalmente, se echó de nuevo a un char de nuevo y 'b'.

    Aquí es un ejemplo de casting:

    System.out.println( (int)('a') ); //97
    System.out.println( (int)('b') ); //98
    System.out.println( (char)(97) ); //a
    System.out.println( (char)(98) ); //b

    Así, su código final podría ser este:

    //get first char in the input string
    char value = et.getText().toString().charAt(0);
    
    int nextValue = (int)value + 1; //find the int value plus 1
    
    char c = (char)nextValue; //convert that to back to a char
    
    et.setText( String.valueOf(c) ); //print the char as a string

    Por supuesto, esto sólo funcionará correctamente si hay una sola carácter de entrada.

    • El código de trabajo, incluso si hay varios caracteres que hay en la edición de texto.
    • Sí, pero no funciona correctamente. Si puedo entrar en xaq la salida será y. Y si no se especifica nada, se va a romper. Está bien, pero no perfecto.
    • No se puede agregar 1 a un char directamente?
    • Como este? Sí se puede, pero sólo porque el elenco es hecho automáticamente para el en ese momento. Yo prefiero explicar la totalidad de la cosa. En otros idiomas, es posible que no se compila si usted agregar tipos incompatibles (char e int).
    • char es un tipo numérico, como byte o short, y de la misma (molesto) la conversión ocurre con los tipos (incluso si ambos operandos son de byte, char, short, o lo que sea).
    • Usted llama a una conversión, sino que es el mismo que el de un elenco. Sencillamente, no se puede comparar dos valores de tipo diferente (creo). Uno está decidido a ser el mismo tipo que el otro. Entiendo lo que estás diciendo, pero yo lo veo de esta manera: 'a' + 1 podría ser interpretado como 'a' + '1' o 97 + 1. De cualquier manera, un tipo de convertir a la otra. Pero sí, porque char es un tipo numérico, va a terminar siendo 97 + 1.
    • En realidad, acabo de probar esto y supongo que usted está probablemente en lo cierto: ideone.com/0467ev a Pesar de que todavía siento que lo que he dicho es correcto. No estoy muy seguro. Sé char es un tipo numérico, pero aún así debe de ser de fundición de tipos similares. Hmmm, bueno.

  2. 9

    Una manera más sencilla sería:

    char value = edt.getText().toString().charAt(0);
    edt.setText(Character.toString ((char) value+1));

    Aquí el value + 1 añade el equivalente decimal del carácter y de los incrementos de él por uno.. Aquí es un pequeño gráfico:

    Aumentar un valor char por uno
    Aumentar un valor char por uno

    Qué sucede después de la ‘z’? … no choque.. consulte aquí para ver el gráfico completo..

    • Hay un pequeño problema con esto. Intento de encontrar. Sugerencia: me pasa a ser uno de los «accesos directos».
    • Yo creo que lo tengo ahora.. ?
    • Nope, eso no importa. La salida se dará siempre la mismo valor de la entrada. Por qué?
    • Ohhh.. que fue estúpido de mi parte.
    • Jaja buena para ver la diferencia.
    • ¿Por qué usar un propensos a errores de preincremento en lugar de sólo value + 1?
    • Yo no sabía que preincremento el error porne. Si pudiera me apunte en esa dirección. Voy a corregir yo mismo.
    • Es propenso a exactamente el error que ha cometido – la mezcla de pre – y post-incremento – y propenso a errores donde se olvidan de que había un operador de incremento en el medio de una expresión y tratar de utilizar la variable para el valor original.
    • He cambiado .. tienes razón..

  3. 6

    Probar este

    String convertString = getIncrementStr("abc");
    public static String getIncrementStr(String str){
        StringBuilder sb = new StringBuilder();
        for(char c:str.toCharArray()){
            sb.append(++c);
        }
        return sb.toString();
    }
  4. 3
    String value = edt.getText();
    edt.setText(value + 1);

    Si el de arriba es el código, entonces lo que estamos haciendo es la concatenación de un 1 al final de su value cadena. Por lo tanto, haga clic en un botón de alterar el texto que se visualiza a partir de «su texto» a «su text1». Este proceso continuará en el botón siguiente, haga clic en para mostrar «su text11». El problema es en realidad un error de tipo.

  5. 3

    Usted necesita para convertir el valor de texto (caracteres) para el valor ascii, a continuación, aumenta, no sólo el texto.

    value = edt.getText().toString();
    int ascii = (int)value;
    edt.setText(Character.toString ((char) ascii+1));
    • Probé también y dio missmatch y no puede emitir problemas =/ gracias tho
    • getText() devuelve Editable que no se puede lanzar a int directamente…
    • Correcto, me fijo.
  6. 3

    Intente esto:

    edt.setText(Character.toString((char)(edt.getText().charAt(0) + 1)));

Dejar respuesta

Please enter your comment!
Please enter your name here