java实现英文转摩尔斯电码传输(一)

摩尔斯电码简介

摩尔斯电码(Morse code)也被称作摩斯密码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,是一种早期的数字化通信形式。不同于现代化的数字通讯,摩尔斯电码只使用零和一两种状态的二进制代码,它的代码包括五种:短促的点信号“・”,保持一定时间的长信号“—”,表示点和划之间的停顿、每个词之间中等的停顿,以及句子之间长的停顿。

文章简介
这个系列的目的为了讲解,java连接数据库,java文件读取,java如何网络传输这些功能,后面会把这个文章不断的完善。

数据库建表语句

这是数据库建表成功之后的样子。

/*Navicat MySQL Data TransferSource Server         : localhost_3306Source Server Type    : MySQLSource Server Version : 80028Source Host           : localhost:3306Source Schema         : projectdatabaseTarget Server Type    : MySQLTarget Server Version : 80028File Encoding         : 65001Date: 30/01/2023 14:54:25
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for morsecodemappingtable
-- ----------------------------
DROP TABLE IF EXISTS `morsecodemappingtable`;
CREATE TABLE `morsecodemappingtable`  (`id` int NOT NULL AUTO_INCREMENT,`letter` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,`code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 62 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;-- ----------------------------
-- Records of morsecodemappingtable
-- ----------------------------
INSERT INTO `morsecodemappingtable` VALUES (1, 'A', '01');
INSERT INTO `morsecodemappingtable` VALUES (2, 'B', '1000');
INSERT INTO `morsecodemappingtable` VALUES (3, 'C', '1010');
INSERT INTO `morsecodemappingtable` VALUES (4, 'D', '100');
INSERT INTO `morsecodemappingtable` VALUES (5, 'E', '0');
INSERT INTO `morsecodemappingtable` VALUES (6, 'F', '0010');
INSERT INTO `morsecodemappingtable` VALUES (7, 'G', '110');
INSERT INTO `morsecodemappingtable` VALUES (8, 'H', '0000');
INSERT INTO `morsecodemappingtable` VALUES (9, 'I', '00');
INSERT INTO `morsecodemappingtable` VALUES (10, 'J', '0111');
INSERT INTO `morsecodemappingtable` VALUES (11, 'K', '101');
INSERT INTO `morsecodemappingtable` VALUES (12, 'L', '0100');
INSERT INTO `morsecodemappingtable` VALUES (13, 'M', '11');
INSERT INTO `morsecodemappingtable` VALUES (14, 'N', '10');
INSERT INTO `morsecodemappingtable` VALUES (15, 'O', '111');
INSERT INTO `morsecodemappingtable` VALUES (16, 'P', '0110');
INSERT INTO `morsecodemappingtable` VALUES (17, 'Q', '1101');
INSERT INTO `morsecodemappingtable` VALUES (18, 'R', '010');
INSERT INTO `morsecodemappingtable` VALUES (19, 'S', '000');
INSERT INTO `morsecodemappingtable` VALUES (20, 'T', '1');
INSERT INTO `morsecodemappingtable` VALUES (21, 'U', '001');
INSERT INTO `morsecodemappingtable` VALUES (22, 'V', '0001');
INSERT INTO `morsecodemappingtable` VALUES (23, 'W', '011');
INSERT INTO `morsecodemappingtable` VALUES (24, 'X', '1001');
INSERT INTO `morsecodemappingtable` VALUES (25, 'Y', '1011');
INSERT INTO `morsecodemappingtable` VALUES (26, 'Z', '1100');
INSERT INTO `morsecodemappingtable` VALUES (27, '0', '11111');
INSERT INTO `morsecodemappingtable` VALUES (28, '1', '01111');
INSERT INTO `morsecodemappingtable` VALUES (29, '2', '00111');
INSERT INTO `morsecodemappingtable` VALUES (30, '3', '00011');
INSERT INTO `morsecodemappingtable` VALUES (31, '4', '00001');
INSERT INTO `morsecodemappingtable` VALUES (32, '5', '00000');
INSERT INTO `morsecodemappingtable` VALUES (33, '6', '10000');
INSERT INTO `morsecodemappingtable` VALUES (34, '7', '11000');
INSERT INTO `morsecodemappingtable` VALUES (35, '8', '11100');
INSERT INTO `morsecodemappingtable` VALUES (36, '9', '11110');
INSERT INTO `morsecodemappingtable` VALUES (37, '.', '010101');
INSERT INTO `morsecodemappingtable` VALUES (38, ':', '111000');
INSERT INTO `morsecodemappingtable` VALUES (39, ',', '110011');
INSERT INTO `morsecodemappingtable` VALUES (40, ';', '101010');
INSERT INTO `morsecodemappingtable` VALUES (41, '?', '001100');
INSERT INTO `morsecodemappingtable` VALUES (42, '=', '10001');
INSERT INTO `morsecodemappingtable` VALUES (43, '\'', '011110');
INSERT INTO `morsecodemappingtable` VALUES (44, '/', '10010');
INSERT INTO `morsecodemappingtable` VALUES (45, '!', '101011');
INSERT INTO `morsecodemappingtable` VALUES (46, '-', '100001');
INSERT INTO `morsecodemappingtable` VALUES (47, '_', '001101');
INSERT INTO `morsecodemappingtable` VALUES (48, '\"', '010010');
INSERT INTO `morsecodemappingtable` VALUES (49, '(', '10110');
INSERT INTO `morsecodemappingtable` VALUES (50, ')', '101101');
INSERT INTO `morsecodemappingtable` VALUES (51, '$', '0001001');
INSERT INTO `morsecodemappingtable` VALUES (52, '&', '01000');
INSERT INTO `morsecodemappingtable` VALUES (53, '@', '011010');
INSERT INTO `morsecodemappingtable` VALUES (54, '+', '01010');
INSERT INTO `morsecodemappingtable` VALUES (55, 'AA', '0101');
INSERT INTO `morsecodemappingtable` VALUES (56, 'AR', '01010');
INSERT INTO `morsecodemappingtable` VALUES (57, 'AS', '01000');
INSERT INTO `morsecodemappingtable` VALUES (58, 'BK', '1000101');
INSERT INTO `morsecodemappingtable` VALUES (59, 'BT', '10001');
INSERT INTO `morsecodemappingtable` VALUES (60, 'CT', '10101');
INSERT INTO `morsecodemappingtable` VALUES (61, 'SK', '000101');
INSERT INTO `morsecodemappingtable` VALUES (62, 'SOS', '000111000');SET FOREIGN_KEY_CHECKS = 1;

项目结构

pom.xml

``xml

<?xml version="1.0" encoding="UTF-8"?>

4.0.0

<groupId>org.example</groupId>
<artifactId>telegraph</artifactId>
<version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version></dependency><!-- https://mvnrepository.com/artifact/org/jaudiotagger --><dependency><groupId>org</groupId><artifactId>jaudiotagger</artifactId><version>2.0.3</version></dependency>
</dependencies>

```

链接数据库的方法

我们把链接数据库,封装成一个方法,然后反悔这个数据库查询的结果,就是查询这个数据库,然后把这数据库中的内容查询出来,然后封装成一个列表。

public static ArrayList<HashMap<String, String> > DatabaseConnection() throws Exception{// 这个方法负责连接数据库 并把获取的值做成映射表返回HashMap<String, String> hashMap1 = new HashMap<>();HashMap<String, String> hashMap2 = new HashMap<>();Class.forName("com.mysql.cj.jdbc.Driver");//2. 获取连接// String url = "jdbc:mysql://127.0.0.1:3306/books"; // 如果是mysql5这样写String url = "jdbc:mysql://localhost:3306/projectdatabase?serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true"; // 如果是mysql8这样写String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);//3. 定义sqlString sql = "SELECT * FROM morsecodemappingtable";//4. 获取执行sql的对象 StatementStatement stmt =  conn.createStatement();//5. 执行sqlResultSet rs = stmt.executeQuery(sql);while(rs.next()){String letter = rs.getString(2);String code = rs.getString(3);hashMap1.put(letter, code);hashMap2.put(code, letter);}ArrayList<HashMap<String, String> >arrayList = new ArrayList<>();arrayList.add(hashMap1);arrayList.add(hashMap2);return arrayList;}

Code类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Code {private String letter;private String code;}

把原文文本转化成摩尔斯电码

在Scanner文本中写入你需要转化的文本。

然后通过下面这个方法,这是一个加密函数,讲获取的文本转化成对应的摩尔斯电码。

// 加密函数public static String toCode(String text, HashMap<String, String> hashMap){String[] strs = text.toUpperCase().split(" ");String text2 = "";for (String x : strs){//            System.out.println(x);for (int i = 0; i < x.length(); ++ i){text2 += hashMap.get(x.charAt(i)+"") + " ";}}text2.trim();return text2;}

把摩尔斯电码转化成对应文本

这个方法的目的是解密,把获取的摩尔斯电码进行解密,转换成对应的文本,就是我们需要注意的是,这个摩尔斯电码需要的是用空格,将每个字母的对应的电码隔开,这样更加方便于解密。

// 解密函数public static String toText(String code, HashMap<String, String> hashMap){String[] strs = code.toLowerCase().split(" ");String text2 = "";for (String x : strs){//            System.out.println(x);text2 += hashMap.get(x+"") + " ";}// 单词都是小写的话好看一点text2 = text2.trim().toLowerCase();return text2;}

完整代码

import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.mp3.MP3AudioHeader;
import org.jaudiotagger.audio.mp3.MP3File;import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;public class Main {public static ArrayList<HashMap<String, String> > DatabaseConnection() throws Exception{// 这个方法负责连接数据库 并把获取的值做成映射表返回HashMap<String, String> hashMap1 = new HashMap<>();HashMap<String, String> hashMap2 = new HashMap<>();Class.forName("com.mysql.cj.jdbc.Driver");//2. 获取连接// String url = "jdbc:mysql://127.0.0.1:3306/books"; // 如果是mysql5这样写String url = "jdbc:mysql://localhost:3306/projectdatabase?serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true"; // 如果是mysql8这样写String username = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, username, password);//3. 定义sqlString sql = "SELECT * FROM morsecodemappingtable";//4. 获取执行sql的对象 StatementStatement stmt =  conn.createStatement();//5. 执行sqlResultSet rs = stmt.executeQuery(sql);while(rs.next()){String letter = rs.getString(2);String code = rs.getString(3);hashMap1.put(letter, code);hashMap2.put(code, letter);}ArrayList<HashMap<String, String> >arrayList = new ArrayList<>();arrayList.add(hashMap1);arrayList.add(hashMap2);return arrayList;}// 加密函数public static String toCode(String text, HashMap<String, String> hashMap){String[] strs = text.toUpperCase().split(" ");String text2 = "";for (String x : strs){//            System.out.println(x);for (int i = 0; i < x.length(); ++ i){text2 += hashMap.get(x.charAt(i)+"") + " ";}}text2.trim();return text2;}// 解密函数public static String toText(String code, HashMap<String, String> hashMap){String[] strs = code.toLowerCase().split(" ");String text2 = "";for (String x : strs){//            System.out.println(x);text2 += hashMap.get(x+"") + " ";}// 单词都是小写的话好看一点text2 = text2.trim().toLowerCase();return text2;}public static void main(String[] args) throws Exception{// 初始化连接数据库ArrayList<HashMap<String, String> > hashMap = DatabaseConnection();// letter->code 加密哈希表HashMap<String, String> hashMap1 = hashMap.get(0);// code->letter 解密哈希表HashMap<String, String> hashMap2 = hashMap.get(1);// 获取的文本String text = "";
//        System.out.println(hashMap1);
//        System.out.println(hashMap2);// 将文本转化为摩尔斯电码BufferedReader reader = new BufferedReader(new FileReader("src/main/resources/texts/Scanner.txt"));BufferedWriter writer = new BufferedWriter(new FileWriter("src/main/resources/texts/Code.txt"));String line;while((line = reader.readLine()) != null){// 去除首尾多余的空格line = line.trim();// 加空格是为了后面好分割数据text = text + line + " ";
//            System.out.println(line);}text = text.trim();
//        System.out.println(text);// 获取加密之后的文本String code_text = toCode(text, hashMap1);writer.write(code_text);writer.flush(); // 一定要刷新后面writer.close();System.out.println(code_text);// 讲解密的内容存储到这个文本里面writer = new BufferedWriter(new FileWriter("src/main/resources/texts/decrypt.txt"));String letter_text = toText(code_text, hashMap2);System.out.println(letter_text);writer.write(letter_text);writer.flush(); // 一定要刷新后面writer.close();}}

运行结果

每个文本的情况

存储信息的原始文章的文本

加密之后的摩尔斯电码的文本

摩尔斯电码解密之后的文本。

java实现英文转摩尔斯电码传输(一)相关推荐

  1. Java MorseCoder - Java 语言实现的摩尔斯电码编码解码器

    最近在看<编码-隐匿在计算机软件背后的语言>这本书,看到了一张译码表很有意思: 不免让我会想起本科在学编码的那段轻松岁月,于是就去查了如何用Java代码实现这个摩尔的编码和译码过程,代码如 ...

  2. 摩尔斯电码_摩尔斯电码二叉树和baader meinhof现象

    摩尔斯电码 The other night I was watching some videos by 2 Youtube channels I really like. The first one ...

  3. 牛逼了!用Python实现摩尔斯电码翻译器,网友:“怎么敲我爱你?”

    莫尔斯电码是一种将文本信息作为一系列开,关的音调,灯光或咔嗒声进行传输的方法,熟练的听众或观察者无需特殊设备即可直接理解.它以电报的发明者塞缪尔·FB·莫尔斯(Samuel FB Morse)的名字命 ...

  4. 利用python实现将文本、摩尔斯电码与用滴答表示的摩尔斯电码三者相互转换

    文章目录 目录 前言 一.摩尔斯电码的对照表: 二.python代码的完整展示 三.代码运行结果的展示: 四.总结与注意事项 前言 本文的代码主要通过字典与反转字典,实现摩尔斯电码与文本的相互转换,并 ...

  5. 蓝桥杯-9-3摩尔斯电码(java)

    算法提高 9-3摩尔斯电码 时间限制:1.0s 内存限制:256.0MB问题描述摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"zylib.h&q ...

  6. 摩尔斯电码转换python编码_摩尔斯电码到英文python3

    我想用Python 3将摩尔斯电码转换成英文 我已经设法使用这个将英语转换成莫尔斯码 http://code.activestate.com/recipes/578407-simple-morse-c ...

  7. Java实现 蓝桥杯 算法提高 摩尔斯电码

    算法提高 9-3摩尔斯电码 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"zy ...

  8. Python实现摩尔斯电码和英文互译

    前段时间看到了一个科普摩尔斯电码的博客,感觉挺好玩的,就想着写一个翻译摩尔斯电码的小程序,懒了好几天了,一直没写,今天终于完成了 代码如下 code_dict = {'A': '.-', 'B': ' ...

  9. Java 解析摩尔斯电码并生成音频流/文件

    旁白 这周老大安排了一个活儿,前端传一组摩尔斯电码过来,将其装成音频流通过WebSocket推给前端进行播放,由于场景的特殊还需要控制"点" "划"播报的时间长 ...

最新文章

  1. hdu 4059 The Boss on Mars
  2. ant引入html页面,antd引入普通html使用,将ant Design本地化
  3. Qt中的QSpinBox
  4. RHEL7 - 从命令行管理文件
  5. 爬虫简单入门:第一个简单爬虫
  6. 深入掌握Linux操作系统,其实也没你想象那么难
  7. 从链接中获取文件名及扩展名
  8. 计算机教师职业幸福感,教师的职业幸福感是什么
  9. 字节转换,字符串与数字转换
  10. Lc101对称二叉树
  11. 关于sliverlight4 打印功能
  12. Xcode的插件的路径
  13. 【Unity3D插件】AnyPortrait插件分享《(一)制作史莱姆动画》
  14. 网页加速之Link prefetching
  15. LWN:滚动发布的稳定版内核!
  16. bzoj4238 电压
  17. 【备忘】Unity 单界面UI多个挖洞实现(shader+mask)
  18. 苹果手机怎么一屏两用
  19. 3650M5 IMM 配置升级
  20. OpenStack组件——Keyston身份认证服务

热门文章

  1. 微服务部署:蓝绿部署、滚动部署、灰度部署(金丝雀部署)、功能开关发布
  2. 计算机界面就是桌面吗,游戏界面怎么切换到桌面,电脑游戏界面怎么切换到桌面...
  3. 哔哩哔哩「会员购」业务网关的研发赋能实践
  4. java构造器是什么?
  5. 【LaTeX】LaTeX入门
  6. JAVA中医舌诊接口使用示例代码,JAVA舌象图特征人工智能识别代码,JAVA实现舌象特征检测与识别
  7. (内付学习版源码和文档,包含房客源功能)采用thinkphp开发的房产管理系统。
  8. lisp插件圆弧转折线_AutoCAD中圆弧折线化方法与实现
  9. 知识是什么计算机如何表示知识,计算机基础知识教程介绍
  10. 软考(12)-综合布线技术