复制
收藏
提问
简洁

java题目:设计了一种对英文文章的加密规则,加密算法如下: 1、对“abcdefg”,每个字母用其后面一个字母替代,循环替代,如a替换为b,d替换为e,g替换为a; 2、对“hijklmn”,每个字母用其后面第三个字母替代,循环替代,如h替换为k,j替换为m,m替换为i; 3、对“opqrst”,每个字母用其前面一个字母替代,循环替代,如o替换为t,q替换为p,t替换为s; 4、对“uvwxyz”,每个字母用其前面第二个字母替代,循环替代,如u替换为y,v替换为z,x替换为v; 5、大写字母采用相同的加密规则,替换为对应的大写字母。 请让用户从控制台输入一段英文文章,对文章进行加密处理,加密后的内容存储到项目路径下保存为.txt文件;并统计英文原文中26个字母(不区分大小写)的出现次数,按照字母出现次数的高低排序,在控制台打印出各字母及其出现次数。

3月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

要实现这个加密算法,我们可以使用Java语言编写一个程序。下面是一个简单的示例代码,实现了上述加密规则,并且统计了英文原文中26个字母的出现次数,最后将加密后的内容保存到一个.txt文件中,并在控制台打印出各字母及其出现次数。

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class EncryptArticle {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入英文文章:");
        String input = scanner.nextLine();
        scanner.close();

        // 加密文章
        String encrypted = encrypt(input);

        // 保存加密后的文章到文件
        saveToFile(encrypted, "encrypted_article.txt");

        // 统计字母出现次数
        Map<Character, Integer> letterCount = countLetters(input);
        printLetterFrequency(letterCount);
    }

    private static String encrypt(String text) {
        StringBuilder encrypted = new StringBuilder();
        for (char c : text.toCharArray()) {
            if (c >= 'a' && c <= 'g') {
                c = (char) (c + 1);
            } else if (c >= 'h' && c <= 'm') {
                c = (char) ((c - 'h' + 3) % 7 + 'h');
            } else if (c >= 'o' && c <= 't') {
                c = (char) (c - 1);
            } else if (c >= 'u' && c <= 'z') {
                c = (char) ((c - 'u' + 2) % 6 + 'u');
            }
            if (Character.isUpperCase(c)) {
                c = Character.toLowerCase(c);
            }
            encrypted.append(c);
        }
        return encrypted.toString();
    }

    private static void saveToFile(String content, String fileName) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            writer.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static Map<Character, Integer> countLetters(String text) {
        Map<Character, Integer> letterCount = new HashMap<>();
        for (char c : text.toCharArray()) {
            if (Character.isLetter(c)) {
                letterCount.put(Character.toLowerCase(c), letterCount.getOrDefault(Character.toLowerCase(c), 0) + 1);
            }
        }
        return letterCount;
    }

    private static void printLetterFrequency(Map<Character, Integer> letterCount) {
        TreeMap<Integer, Character> sortedMap = new TreeMap<>();
        for (Map.Entry<Character, Integer> entry : letterCount.entrySet()) {
            sortedMap.put(entry.getValue(), entry.getKey());
        }
        for (Map.Entry<Integer, Character> entry : sortedMap.descendingMap().entrySet()) {
            System.out.println(entry.getKey() + " - " + entry.getValue());
        }
    }
}

这段代码首先定义了一个EncryptArticle类,其中包含了主方法main,以及几个私有方法来实现加密、保存文件和统计字母频率的功能。

  • encrypt方法实现了加密逻辑。
  • saveToFile方法将加密后的内容保存到指定的文件中。
  • countLetters方法统计了输入文本中每个字母的出现次数。
  • printLetterFrequency方法按照字母出现次数的高低进行排序,并在控制台打印出来。

用户可以运行这个程序,输入一段英文文章,程序将自动完成加密、保存和统计字母频率的操作。

你觉得结果怎么样?
如何实现英文文章的加密算法?
Java中如何读取控制台输入?
Java如何将字符串写入文件?
如何统计英文文章中字母的出现次数?
Java中如何对文件进行读写操作?
如何实现循环替代加密算法?

以上内容由AI搜集生成,仅供参考

在线客服