Java: For Loop para insertar asteriscos entre los caracteres de una cadena ingresada por el usuario

Estoy trabajando en una tarea de clase con algunas partes individuales, que he hecho todas con la excepción de esta. Necesito obtener una entrada de cadena del usuario y crear un bucle (preferiblemente un bucle for) que inserte asteriscos entre cada carácter. Estoy completamente perplejo con este, así que si alguien pudiera ayudarme a comenzar, sería apreciado.

se me ha ocurrido esto hasta ahora

    } else if (choice.equalsIgnoreCase("C")) {
        System.out.print("Enter text here: ");
        String orig = input.nextLine();

        // To use for asterisk insertion
        int x = 1;
        int y = 2;

        for (int length = orig.length(); length > 0;) {
            orig = orig.substring(0,x) + "*" + orig.substring(y);
            x = x + 2;
            y = y + 2;
        }

    } 

Se compila muy bien, pero cuando lo pruebo e ingreso un texto, aparece una excepción en el subproceso "principal" java.lang.StringIndexOutOfBoundsException: índice de cadena fuera de rango: 5

preguntado el 29 de septiembre de 13 a las 22:09

En lugar de usar una subcadena, sería mucho más fácil, intuitivo y eficiente simplemente recrear una nueva cadena agregando cada carácter de la cadena original seguido de un asterisco (excepto el último) a un StringBuilder. Por supuesto, también puede agregar un asterisco antes de cada carácter excepto el primero. -

El único problema con eso podría ser que aún no hemos aprendido a usar StringBuilder, así que no estoy seguro de si debería usar ese método. Además, la salida del ejemplo coloca el primer asterisco después del primer carácter y el último asterisco después del último carácter. es decir; hi -

Creo que con el error que estoy recibiendo, solo necesito encontrar una manera de decirle al bucle cuándo dejar de hacer este proceso, ya que va hasta el final y luego se estropea. -

StringBuilder es una clase como todas las demás clases. Tiene métodos públicos y un javadoc público. Si tu profesor no acepta el hecho de que puedes encontrar una clase y leer su documentación por ti mismo, entonces se pierde toda esperanza. Por supuesto, puede elegir usar solo STring, creando una matriz de caracteres y el constructor String. -

He estado debatiendo el uso de StringBuilder todo el tiempo, ya que buscar cómo insertar caracteres en cadenas me ha llevado a hacerlo muchas veces. Parece mucho más fácil de usar, creo que iré con él. Gracias por el consejo. -

3 Respuestas

No reutilice variables a menos que sea necesario. Solo hace que el código sea más complicado y difícil de leer.

    String orig = "my test";
    StringBuilder result = new StringBuilder();

    for (int i = 0; i < orig.length() -1;i++) {
        result.append(orig.charAt(i));
        result.append('*');
    }
    result.append(orig.charAt(orig.length()-1));

Respondido el 29 de Septiembre de 13 a las 22:09

Su ciclo for no tiene una cláusula final válida.

for (int length = orig.length(); length > 0;)

se ejecutará indefinidamente hasta que provoque una excepción.

    System.out.print("Enter text here: ");
    String orig = input.nextLine();

    for (int length = orig.length() - 1; length > 0; length--) {
        orig = orig.substring(0,length) + "*" + orig.substring(length);
    }

produce

Enter text here: TestOutput T*e*s*t*O*u*t*p*u*t

Si desea un * después de la 't' final, puede agregarlo fácilmente eliminando el "- 1" en el bucle for.

Respondido el 29 de Septiembre de 13 a las 23:09

pruebe este programa para agregar asteriscos entre cada carácter de la cadena.

int leng;
Scanner sc= new Scanner(System.in);
System.out.println("enter the name");
String name=sc.nextLine();
leng=name.length();
char c[]=new char[leng];
for(int i=0;i<=leng-1;i++){
    c[i]=name.charAt(i);

    System.out.print(c[i]);
    if(i<leng-1)
        System.out.print("*");
}

Respondido el 21 de enero de 15 a las 07:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.