Я прочитал текстовый файл и посчитал вхождения каждой буквы в этом файле. Я напечатал наиболее повторяющееся письмо со счетом в порядке убывания. Я хочу заменить повторяющееся письмо на другое письмо и записать обратно в выходной файл. Я попытался заменить повторенное на другое письмо символом или строковым массивом, но я не знаю, в чем проблема. Кто-нибудь может мне помочь, пожалуйста. СпасибоЧтение из текстового файла и его запись
ответ
Попытка разбить простой код путем сравнения частот букв - это итеративный подход, когда вы начинаете с порядка «e», «t», «a», «o», «i», «n», 's', 'h', 'r', ... характеристическое распределение для английского языка. Обычно это не будет относительный порядок букв в коротком тексте. Таким образом, не ожидайте получения ожидаемого результата с первой попытки - вам придется изменить таблицу переводов в соответствии с предположениями на основе первого результата, повторного запуска, угадывания снова и т. Д.
Вот метод count, переписанный для возврата массива, который связывает букву ('a' == 0, 'b' == 1, ...) с позицией в таблице букв, упорядоченной по частоте.
public int[] load() throws IOException {
File fp = new File("realtext.txt");
BufferedReader in = new BufferedReader(new FileReader(fp));
int[] count = new int[26];
int nextChar;
while ((nextChar = in.read()) != -1) {
int ch = ((char) nextChar);
if (ch >= 'a' && ch <= 'z') {
count[ch - 'a']++;
}
}
int[] position = new int[count.length];
for (int k = 0; k < 26; k++) {
position[k] = k;
}
for (int k = 0; k < 26; k++) {
int max = count[k];
int maxpos = k;
for (int l = k + 1; l < 26; l++) {
if(count[l] > max){
max = count[l];
maxpos = l;
}
}
int h = count[k];
count[k] = count[maxpos];
count[maxpos] = h;
h = position[k];
position[k] = position[maxpos];
position[maxpos] = h;
}
int trans[] = new int[position.length];
System.out.println("Descending order");
for (int k = 0; k < 26; k++) {
trans[position[k]] = k;
System.out.printf("%c = %d -> %d-th\n",
position[k] + 'A', count[k], k);
}
return trans;
}
Метод замены использует этот массив:
public void replacing(int[] trans) throws IOException {
File fp = new File("ciphertext1.txt");
BufferedReader in = new BufferedReader(new FileReader(fp));
char[] s = {'e', 't', 'a', 'o', 'i', 'h', 's', 'n', 'd', 'r',
'l', 'c', 'u', 'm', 'w', 'f', 'g', 'y', 'p', 'b',
'v', 'k', 'j', 'x', 'q', 'z'};
String line;
while ((line = in.readLine()) != null) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < line.length(); ++i){
char c = line.charAt(i);
if('a' <= c && c <= 'z'){
sb.append(s[trans[c-'a']]);
} else {
sb.append(c);
}
}
System.out.println(sb.toString());
}
in.close();
}
Для записи в файл, используйте
File outfp = new File("decoded.txt");
PrintWriter out = new PrintWriter(new FileWriter(outfp));
...
out.println(sb.toString());
...
out.close();
Чтобы сбросить таблицу перевода, используйте
for(char c = 'a'; c <= 'z'; ++c){
out.println(c + " => " + s[trans[c-'a']]);
}
Привет, господин Лаун, я получаю несколько слов в сочетании с другими словами вроде этого ** questionsit righttime beabsorbed ** .. Также я хотел написать в новый файл письмо и ключ (письмо), который заменяется. ** U -> e, V-> t ** (буква и ключ) .. как я могу записать его в новый файл. –
a => v b => i с => г д => у е => с е => п г => г ч => б я => F J => р к => ч л => и m => q n => m o => k p => r q => d г => т с => с т => а и => е v => т ш => л х => о у => х г => ш а => v b => i c => g d => y Выходной файл такой же, как и для таблицы перевода Mr.laune –
- 1. чтение и запись текстового файла
- 2. Чтение и запись текстового файла
- 3. Чтение из текстового файла и запись его в XML
- 4. Чтение и запись текстового файла
- 5. Чтение/запись текстового файла
- 6. Чтение/запись из текстового файла в C++
- 7. Чтение текстового файла Запись нового CSV-файла
- 8. Чтение и запись текстового файла в JavaScript
- 9. Чтение из текстового файла и запись в другой текстовый файл
- 10. Чтение из текстового файла
- 11. Чтение из текстового файла
- 12. Чтение из текстового файла и запись в двоичный файл
- 13. Чтение текстового файла и разбив его разделителями
- 14. Запись и чтение из файла
- 15. чтение и запись из файла
- 16. Чтение и запись из файла
- 17. чтение и запись из файла
- 18. чтение и запись из файла
- 19. Чтение и запись из текстового файла с запросами пользователя
- 20. Чтение и запись из текстового файла в сервлет
- 21. Чтение и запись файла
- 22. Чтение из текстового файла
- 23. Запись текстового файла из JTable и чтение из текстового файла в JTable
- 24. чтение из текстового файла
- 25. чтение и запись файла
- 26. Чтение текста из текстового файла и его сохранение в Jtable
- 27. чтение данных из текстового файла и проверка его
- 28. Чтение данных из текстового файла и сохранение его в объекте
- 29. Чтение данных из текстового файла и его разграничение
- 30. Чтение имени файла из текстового поля и его отображение
Можете ли вы объяснить, ваш код немного больше? Как добавить комментарии? – Nivedita
Mr.Nivedita добавил комментарии к коду. –
m a girl: P (filler) – Nivedita