复制
收藏
提问
简洁
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语言编写一个程序。下面是一个简单的实现示例:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class EncryptArticle {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入英文文章:");
String article = scanner.nextLine();
scanner.close();
// 加密文章
String encryptedArticle = encryptArticle(article);
System.out.println("加密后的文章:" + encryptedArticle);
// 保存加密后的文章到文件
saveToFile(encryptedArticle);
// 统计字母出现次数
Map<Character, Integer> letterCount = countLetters(article);
printLetterFrequency(letterCount);
}
private static String encryptArticle(String article) {
StringBuilder encrypted = new StringBuilder();
for (char c : article.toCharArray()) {
if (c >= 'a' && c <= 'g') {
c = (char) ((c - 'a' + 1) % 7 + 'a');
} else if (c >= 'h' && c <= 'm') {
c = (char) ((c - 'h' + 3) % 6 + 'h');
} else if (c >= 'o' && c <= 't') {
c = (char) ((c - 'o + 1) % 5 + 'o');
} 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) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("EncryptedArticle.txt"))) {
writer.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
private static Map<Character, Integer> countLetters(String article) {
Map<Character, Integer> letterCount = new HashMap<>();
for (char c : article.toLowerCase().toCharArray()) {
if (c >= 'a' && c <= 'z') {
letterCount.put(c, letterCount.getOrDefault(c, 0) + 1);
}
}
return letterCount;
}
private static void printLetterFrequency(Map<Character, Integer> letterCount) {
letterCount.entrySet().stream()
.sorted(Map.Entry.<Character, Integer>comparingByValue().reversed())
.forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));
}
}
这个程序首先从控制台接收用户输入的英文文章,然后使用encryptArticle
方法对文章进行加密。加密后的文章通过saveToFile
方法保存到项目路径下的EncryptedArticle.txt
文件中。接着,使用countLetters
方法统计文章中每个字母的出现次数,并通过printLetterFrequency
方法在控制台打印出按出现次数排序的字母及其出现次数。
请注意,这个程序是一个简单的示例,可能需要根据你的具体需求进行调整。
你觉得结果怎么样?