codificar texto String

Hola, estoy recien aprendiendo a programar en Java, y quisiera saber como codificar un texto, es decir, que cada letra(a-z) tenga su propio caracter o un string distinto (ej a=4, b=8, p=|>,etc), cosa que al ingresar un texto, apresca luego uno cn las letras reemplazadas.
intente usar el metodo texto.remplace(char old char,char new char) pero esot solo me lo permite cn un solo char y no con todas las letras del texto. cualquier consejo se agradece.
saludos!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Nadie te va a hacer la tarea

Aquí nadie hace la tarea de nadie, es mejor que expongas dudas muy concretas. sin embargo eso no quiere decir que no ta vayan a ayudar.

Checa la documentación de la clase String, encontrarás métodos como replace(), replaceAll(), charAt(), etc. existen muchos métodos que te pueden ayudar a hacer lo que necesitas.

Te puedo decir que con un ciclo for y un switch lo puedes hacer.

pequeño avance

Esto es lo que he podido hacer:

String texto1=io.pideUnTexto("Ingresa una frase para codificar a código 1337.");
texto1=texto1.toLowerCase();

int i;
char valor[];
valor=texto1.toCharArray();
for (i=0;i

pequeño avance

Esto es lo que he podido hacer:

String texto1=io.pideUnTexto("Ingresa una frase para codificar a código 1337.");
texto1=texto1.toLowerCase();

int i;
char valor[];
valor=texto1.toCharArray();
for (i=0;i

avance pequeño

lo que pude hacer usando toCharArray() y for, esque me devuelve los caracteres uno por uno del String, es decir me "deletrea" la frase, pero como puedo hacer para que esos caracteres me los muestre todos juntos, es definitiva me mostraria la misma frase pero cada letra seria un caracter especificado.

String texto1=io.pideUnTexto("ingresa tu texto");
int i;
char valor[];
valor=texto1.toCharArray();
for(i=0;i

Imagen de rodrigo salado anaya

switch, Override, extends, java.lang...

Cuando creas una clase implícitamente extiendes a java.lang.Object si no le dices a que extender.
Por ejemplo:

class StringCoder extends java.lang.Object{}

Es lo mismito que:

class StringCoder {}

Esto hace que la clase ‘StringCoder’ herede todo lo que tiene Object, entre los métodos existe uno llamado  toString ( http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#t... ).
Puedes sobre escribir los métodos que heredas, teniendo en cuenta que deben de llamarse igual, recibir los mismos tipos y cantidad de parámetros y regresar el mismo tipo que el método original.
Esto esta súper padre porque te dota de mucha flexibilidad. Por ejemplo podemos hacer que la clase ‘StringCoder’ imprima ‘hola mundo’ cada que lo coloquemos dentro de un ‘java.lang.System.out.println(a)’:
Nota: Debes de checar que ‘java.lang.*’ también está por default en todas tus class [:)]

public class Main {
    public static void main(String[] args) {
        StringCoder a = new StringCoder();
        System.out.println(a);
    }
}

class StringCoder extends java.lang.Object{
   @Override
    public String toString() {
       return "hola";
    }
}
/*
run:
hola
*/

Bueno pues espero te ayude este pequeño ejemplo, regresas a comentarnos como te fue va :)

public class Main {
    public static void main(String[] args) {
        StringCoder a = new StringCoder("hola mundo");
        java.lang.System.out.println(a);
    }
}

class StringCoder extends java.lang.Object{
    private String string;
    public StringCoder(String str) {
        string = str;
    }
    @Override
    public String toString() {
        StringBuilder strangeString = new StringBuilder();
        char[] crs = string.toCharArray();
        for (int i = 0; i < crs.length; i++) {
            switch (crs[i]) {
                case 'a':
                    strangeString.append("!");
                    break;
                case 'e':
                    strangeString.append("\"");
                    break;
                case 'i':
                    strangeString.append("#");
                    break;
                case 'o':
                    strangeString.append("$");
                    break;
                case 'u':
                    strangeString.append("%");
                    break;
                default:
                    strangeString.append(crs[i]);
            }
        }
        return strangeString.toString();
    }
}

run:
h$l! m%nd$

usa replaceAll

El ((String) cosa).replace("a", "123") solo te reemplaza la primer ocurrencia, intenta usar String.replaceAll("","")

No es muy conveniente replaceAll

Para los fines que requiere no es muy conveniente usar el replaceAll, ya que tenemos el siguiente problema:

String mensaje = "Mensaje a codificar";
String mensajeCodificado = mensaje.replaceAll("a", "r"); //Queremos reemplazar todas las ocurrencias de "a" por "r" o por cualquier cadena.

El resultado de lo anterior seria:

Mensrje r codificrr

El error en la solución vendrá cuando quiera codificar el caracter "r", por que la codificación no será la correcta, creo que es mas conveniente la respuesta propuesta por rodrigo salado anaya

Cifrado César

 

Este «algoritmo de cifrado» es muy simple y también es muy fácil de implementar. Se le conoce como Cifrado César.

De acuerdo la descripción del Original Poster, en Java:

// Plain
String original = "abp";

// Cipher
String[] replacements = {"4", "8", "|>"};

// Get input
char[] chars = JOptionPane.showInputDialog("Texto:").toLowerCase().toCharArray();

// Encode text
StringBuilder sb = new StringBuilder(chars.length);
for (char c : chars) {
    int index = original.indexOf(c);
    if (index >= 0) {
        sb.append(replacements[index]);
    } else {
        sb.append(c);
    }
}

// Show output
JOptionPane.showMessageDialog(null, sb.toString());

Y, por ejemplo:

  • Entrada

    Entrada

  • Salida

    Salida

~~~