Java - Codificando un string

 
Vista:
sin imagen de perfil

Codificando un string

Publicado por Xavi (21 intervenciones) el 22/10/2021 21:00:13
Soy nuevo en Java. Estoy intentando implementar un método que permita codificar una cadena de texto recibida como parámetro text. El texto de entrada únicamente tiene carácteres de la a-z y signos de puntuación. La codificación tiene que ser la siguiente:

1. El texto puede tener letras en mayúsculas pero estas se tienen que convertir a minúsculas.
2. Los signos de puntuación se ignoran.
3. Cada letra del texto se substituye por otra que se encuentra a una distancia N posiciones adelante en el alfabeto. Este valor N viene determinado por el parámetro distance.
4. El alfabeto es circular, es decir, la siguiente letra después de la 'z' es la 'a'.
5. El parámetro distance puede tener una longitud mayor a la del alfabeto (26). Al ser circular, si es mayor que 26, volverá al inicio.

Hasta el momento he hecho lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Codificando {
 
      private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
 
      /*
      ** @param text: texto que tendrá que ser codificado
      ** @param distance: valor de desplazamiento en el alfabeto
      */
      public String code (String text, int distance){
           // Convertimos el texto de entrada a minúsculas
           String text_low = text.toLowerCase();
           // Separamos el texto en letras
           String[] text_letters = text_low.split("");
           // Problemática a resolver
 
 
}}

Unos ejemplos de aplicación y resultado del método seria:

1
2
3
4
code("a",1) -> return "b"
code("a",3) -> return "c"
code("z",2) -> return "b"
code("vaca",5) -> return "afhf"

Mi idea es separar el texto recibido en letras e ir a buscar estas letras en la constante ALPHABET y aplicar el desplazamiento pero no consigo saber cómo hacerlo.

Muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Codificando un string

Publicado por Tom (1831 intervenciones) el 23/10/2021 14:37:51
A eso lo llaman "cifrado de Cesar" ... si buscas un poco en google encontrarás implementaciones ya hechas en java, listas para copiar y pegar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Codificando un string

Publicado por Kabuto (1381 intervenciones) el 24/10/2021 21:40:04
Siguiendo tu planteamiento de la constante ALPHABET...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Codificando {
 
	private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
 
    /*
    ** @param text: texto que tendrá que ser codificado
    ** @param distance: valor de desplazamiento en el alfabeto
    */
    public static String code(String text, int distance){
         // Convertimos el texto de entrada a minúsculas
         String text_low = text.toLowerCase();
         // Separamos el texto en letras
         String[] text_letters = text_low.split("");
         //Recorremos letras
         for (int i = 0; i < text_letters.length; i++) {
        	 //Comprobamos si está en el alfabeto
        	 if (ALPHABET.contains(text_letters[i])) {
        		 //Averiguamos posicion en alfabeto
        		 int pos = ALPHABET.indexOf(text_letters[i]);
        		 //Sumamos distancia a la posicion
        		 pos += distance;
        		 //Comprobamos si hemos sobrepasado longitud del alfabeto
        		 if (pos >= ALPHABET.length())
        			 //En ese caso, aplicamos diferencia desde el principio del alfabeto
        			 pos = pos - ALPHABET.length();
        		 //Sustituimos letra actual, por la correspondiente a la nueva posicion
        		 text_letters[i] = Character.toString(ALPHABET.charAt(pos));
        	 }
         }
 
         //Tenemos letras codificadas, ahora tenemos que construir un nuevo String con ellas
         StringBuffer nuevo = new StringBuffer();
         for (String letra: text_letters)
        	 nuevo.append(letra);
 
         return nuevo.toString();
    }
 
	public static void main(String[] args) {
		//Prueba
		System.out.println(code("vaca", 5));
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar