首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java实现英文转摩尔斯电码传输(一)

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

作者头像
GeekLiHua
发布于 2025-01-21 12:01:27
发布于 2025-01-21 12:01:27
12800
代码可运行
举报
文章被收录于专栏:JavaJava
运行总次数:0
代码可运行

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

摩尔斯电码简介

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

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

数据库建表语句

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

```

链接数据库的方法

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Code {
    private String letter;
    private String code;

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 加密函数
    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;
    }
把摩尔斯电码转化成对应文本

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 解密函数
    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;
    }
完整代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
    }

}

运行结果

每个文本的情况

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • java实现英文转摩尔斯电码传输(一)
    • 数据库建表语句
    • 项目结构
      • pom.xml
      • 链接数据库的方法
      • Code类
      • 把原文文本转化成摩尔斯电码
      • 把摩尔斯电码转化成对应文本
      • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档