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

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

摩尔斯电码简介

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

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

数据库建表语句

这是数据库建表成功之后的样子。
在这里插入图片描述

/*
 Navicat MySQL Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 80028
 Source Host           : localhost:3306
 Source Schema         : projectdatabase

 Target Server Type    : MySQL
 Target Server Version : 80028
 File Encoding         : 65001

 Date: 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. 定义sql
        String sql = "SELECT * FROM morsecodemappingtable";
        //4. 获取执行sql的对象 Statement
        Statement stmt =  conn.createStatement();
        //5. 执行sql
        ResultSet 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. 定义sql
        String sql = "SELECT * FROM morsecodemappingtable";
        //4. 获取执行sql的对象 Statement
        Statement stmt =  conn.createStatement();
        //5. 执行sql
        ResultSet 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();
    }

}

运行结果
在这里插入图片描述
每个文本的情况

存储信息的原始文章的文本
在这里插入图片描述
加密之后的摩尔斯电码的文本
在这里插入图片描述

摩尔斯电码解密之后的文本。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客李华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值