Java实现莫斯码

记得读书时,计算机老师专门讲过莫斯码,莫斯码是一种早期的数字化通信方式。尽管现在的通信手段和方式已经用不上莫斯码,但知道其实现原理还是很有必要的。所以趁着休息时,用Java实现莫斯码的互换方式,其实就是Map的运用。实现后还他人用莫斯码在群里交流秀了一把,当时好不欢乐。代码如下:

// Morse Code
Java实现莫斯码
// An highlighted block
package org.algorithm;

import java.util.Map;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Iterator;

public class MorseCode
{
    Map  maplist = new HashMap();

    private Map mc()
    {
        //System.out.println("摩尔斯电码");
        maplist.put('A', ".-");
        maplist.put('a', "._");
        maplist.put('B', "-...");
        maplist.put('b', "_...");
        maplist.put('C', "-.-.");
        maplist.put('c', "_._.");
        maplist.put('D', "-..");
        maplist.put('d', "_..");
        maplist.put('E', ".");
        maplist.put('e',",");
        maplist.put('F', "..-.");
        maplist.put('f',  ".._.");
        maplist.put('G', "--.");
        maplist.put('g', "__.");
        maplist.put('H', "....");
        maplist.put('h', ",,,");
        maplist.put('I', "..");
        maplist.put('i', ",,");
        maplist.put('J', ".---");
        maplist.put('j', ".___");
        maplist.put('K', "-.-");
        maplist.put('k', "_._");
        maplist.put('L', ".-..");
        maplist.put('l',"._..");
        maplist.put('M', "--");
        maplist.put('m', "__");
        maplist.put('N', "-.");
        maplist.put('n', "_.");
        maplist.put('O', "---");
        maplist.put('o', "___");
        maplist.put('P', ".--.");
        maplist.put('p', ".__.");
        maplist.put('Q', "--.-");
        maplist.put('q', "__._");
        maplist.put('R', ".-.");
        maplist.put('r', "._.");
        maplist.put('S', "...");
        maplist.put('s', ",,,,");
        maplist.put('T', "-");
        maplist.put('t', "_");
        maplist.put('U', "..-");
        maplist.put('u', ".._");
        maplist.put('V', "...-");
        maplist.put('v', "..._");
        maplist.put('W', ".--");
        maplist.put('w', ".__");
        maplist.put('X', "-..-");
        maplist.put('x', "_.._");
        maplist.put('Y', "-.--");
        maplist.put('y', "_.__");
        maplist.put('Z', "--..");
        maplist.put('z', "__..");

        /* 数字电码0-9 */
        maplist.put('0', "-----");
        maplist.put('1', ".----");
        maplist.put('2', "..---");
        maplist.put('3', "...--");
        maplist.put('4', "....-");
        maplist.put('5', ".....");
        maplist.put('6', "-....");
        maplist.put('7', "--...");
        maplist.put('8', "---..");
        maplist.put('9', "----.");

        /* 标点符号,可自增删 */
        maplist.put(',', "--..--"); // ,逗号
        maplist.put('.', ".-.-.-"); // .句号
        maplist.put('?', "..--.."); // ?问号
        maplist.put('!', "-.-.--"); // !感叹号
        maplist.put('\'', ".----.");// '单引号
        maplist.put('\"', ".-..-.");// "引号
        maplist.put('=', "-...-"); 	// =等号
        maplist.put(':', "---..."); // :冒号
        maplist.put(';', "-.-.-."); // ;分号
        maplist.put('(', "-.--."); 	// (前括号
        maplist.put(')', "-.--.-"); // )后括号
        maplist.put(' ', " ");		// 空格
        return maplist;
    }

    //摩尔斯码加密
    private StringBuffer chrToMorse()
    {
        String str = "Love is a fire which burns unseen.";
        //char plainText[] = str.toUpperCase().toCharArray();//明文
        char plainText[] = str.toCharArray();
        StringBuffer cipherStr = new StringBuffer("");	// 密文字符串
        Map passDic = mc();
        for(int i=0;i<plainText.length;i++)
        {
            char tmp = plainText[i];
            //System.out.printf("%c", plainText[i]);
            if(passDic.containsKey(tmp))
            {
                cipherStr.append(passDic.get(tmp)).append("●");
            }
        }
        System.out.println("摩尔斯电码:"+cipherStr);
        return cipherStr;
    }
    //摩尔斯解码,此方法与上面的加密约定实现
    private void morseToChr()
    {
        StringBuffer mor = chrToMorse();
        String m[] = mor.toString().split("●");
        Map passDic = mc();
        System.out.print("摩尔斯译文:");
        for(int j=0;j<m.length;j++)
        {
            if(passDic.containsValue(m[j]))
            {
                //定义方法,返回Key
                getMapKey(m[j],passDic);
            }
        }
        System.out.println();
    }
    //摩尔斯解码,此方法独立实现,用于接收外部密电
    private void morseToChr(StringBuffer mCode)
    {
        System.out.println("摩尔斯电码2:"+mCode);
        String n[] = mCode.toString().split("●");
        Map passDic = mc();
        System.out.print("摩尔斯译文2:");
        for(int h=0;h<n.length;h++)
        {
            if(passDic.containsValue(n[h]))
            {
                getMapKey(n[h],passDic);
            }

        }
        System.out.println();
    }
    //通过值取key
    private void getMapKey(String mv,Map m)
    {
        Set set = m.entrySet();
        Iterator it = set.iterator();
        String key = "";

        while(it.hasNext())
        {
            Entry<String, Object> enter = (Entry<String, Object>)it.next();
            if(enter.getValue().equals(mv))
            {
                key = String.valueOf(enter.getKey());
                System.out.print(key);
            }
        }
    }
    public static void main(String args[])
    {
        System.out.println("--------摩尔斯电码转换--------");
        //String str = "I love China!";
        StringBuffer mCode = new StringBuffer("-..●.●.-●.-.● ●-.--●.-●-.●--.●--..--●....●.-●.--.●.--.●-.--● ●-...●..●.-.●-●....●-..●.-●-.--●-.-.--● ●..● ●....●---●.--.●.● ●-●---●-..●.-●-.--● ●-●.-.●.●.-●-●...● ●-.--●---●..-● ●.--●.●.-..●.-..●.-.-.-●");
        //new MorseCode().chrToMorse();
        new MorseCode().morseToChr();
        new MorseCode().morseToChr(mCode);
    }
}

你可能感兴趣的:(java)