Замените буквы шифрованного текста английскими буквами в зависимости от частоты
Цель состоит в том, чтобы вычислить частоту букв зашифрованного текста, а затем заменить их английскими буквами на основе их статистики частоты.
Что я уже пробовал:
Я сгенерировал частоты, но когда я использую метод replace, он не дает желаемого результата, например, если я использую один метод replace (), он выводит соответственно(
String A = encryptedText.replace('a','z');. Он заменяет все " а " на "Я", но если я добавлю методы замены(например, один метод замены для каждого символа алфавита
(<pre> String B = encryptedText.replace('b','y');,
(<pre> String C = encryptedText.replace('c','x');) и так далее выполняется только первый метод replace function, остальные не выполняются, и он удваивает все буквы в выводе, например, если я заменяю "a", " b " и " c " на "z", " y " и " x " соответственно, он выводит как "
zbcaycabxabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc".
Ниже приведен мой код:
import java.util.Arrays; import java.util.Scanner; public class FrequencyAnalysisCaesarCipher { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Please enter message to be decrypted: "); String encryptedText = input.nextLine().toLowerCase(); int[] freq = new int[encryptedText.length()]; int i = 0; int j; //Converts given string into character array char[] string = encryptedText.toCharArray(); Arrays.sort(string); Arrays.sort(new int[]{freq[i]}); for (i = 0; i < encryptedText.length(); i++) { freq[i] = 1 ; for (j = i + 1; j < encryptedText.length(); j++) { if (string[i] == string[j]) { freq[i]++; //Set string[j] to 0 to avoid printing visited character string[j] = '0'; } } } //Displays each character and their corresponding frequency System.out.println("Characters and their corresponding frequencies"); for (i = 0; i < freq.length; i++) { if (string[i] != ' ' && string[i] != '0') { System.out.println(string[i] + "-" + freq[i]); } } System.out.println(".............................................."); // oldChar is cipher text letter and newChar is English letter // The newChar have been initiated just so to run the program but can be replaced accordingly based on frequency and then re-run to give the desired output String A = encryptedText.replace('a','z'); String B = encryptedText.replace('b','y'); String C = encryptedText.replace('c','x'); String D = encryptedText.replace('d','w'); String E = encryptedText.replace('e','v'); String F = encryptedText.replace('f','u'); String G = encryptedText.replace('g','t'); String H = encryptedText.replace('h','s'); String I = encryptedText.replace('i','r'); String J = encryptedText.replace('j','q'); String K = encryptedText.replace('k','p'); String L = encryptedText.replace('l','o'); String M = encryptedText.replace('m','n'); String N = encryptedText.replace('n','m'); String O = encryptedText.replace('o','l'); String P = encryptedText.replace('p','k'); String Q = encryptedText.replace('q','j'); String R = encryptedText.replace('r','i'); String S = encryptedText.replace('s','h'); String T = encryptedText.replace('t','g'); String U = encryptedText.replace('u','f'); String V = encryptedText.replace('v','e'); String W = encryptedText.replace('w','d'); String X = encryptedText.replace('x','c'); String Y = encryptedText.replace('y','b'); String Z = encryptedText.replace('z','a'); System.out.print(A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z); } }