使用Java将摩尔斯电码转换为英文文本

时间:2015-04-11 01:13:58

标签: java string

我最近有一项工作,将英语转换为摩尔斯电码,将莫尔斯电码转换为英语。输入摩尔斯电码时,我的老师希望用1个空格分隔单个字母,用' |'分隔单词。例如, - --- | -...是"是。"我能够让英语到莫尔斯完美地工作,但我对莫尔斯英语不知所措。我不知道如何让for循环停在正确的位置,并将其与数组中的一个代码匹配。

只是旁注,我的老师不喜欢Scanner,所以他使用自己的输入系统。我熟悉他的方法,因此我们将不胜感激

public class Project1
{
    public static void main( String [] args )
    {
        String morse[] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..",
            "--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",
            "|",".---","..---","...--","....-",".....","-....","--...","---..","----.","-----"};    
        String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890";

        String inputType = new String();
        inputType = Input.getString( "Is your phrase in Morse Code or English? Enter 'morse' for Morse Code and 'english' for English" );


        if( inputType.equalsIgnoreCase("morse") )
            morseToEnglish(alphabet, morse);
        else if( inputType.equalsIgnoreCase("english") )
            englishToMorse(alphabet, morse);
        else    
            System.out.println("Your entry is invalid");

    }

    public static void englishToMorse(String alphabet, String morse[])
    {
        String phrase = Input.getString("Enter your english phrase.");
        phrase = phrase.toUpperCase();

        for( int i = 0; i < phrase.length(); i++ )
        {
            if( phrase.charAt(i) == ' ' )
            {
                System.out.print("| ");
                continue;
            }

            for( int j = 0; j < alphabet.length(); j++ )
            {
                if( alphabet.charAt(j) == phrase.charAt(i) )
                {
                    System.out.print( morse[j] + " " );
                    break;
                }
            }
        }
    }

    public static void morseToEnglish(String alphabet, String morse[])
    {
        String morseCode = Input.getString("Enter a phrase in morse code.");



        for( int i = 0; i < morseCode.length(); i++ )
        {
            for( int j = 0; j < morse.length; j++ )
            {
                if ( morse[j] == morseCode.charAt(i))
                    System.out.print( alphabet.charAt(j) );

            }
        }   
    }
}

任何指针都将非常感激。哦,对不起,如果morseToEnglish代码看起来不连贯和不好,我已经尝试了很多不同的东西而且不知所措。

2 个答案:

答案 0 :(得分:4)

我建议使用String.split()。您可以拆分|,然后在空格上进一步拆分。带有toString()的枚举类型可以帮助分割转换逻辑(如果你不知道开关,这是学习它们的好机会)。然后根据需要连接字符串添加空格。

String.Split()是一个了不起的工具。学习它会使你受益匪浅。

答案 1 :(得分:2)

morseToEnglish应该与englishToMorse算法相反。

就像之前一样,你可以通过强大的输入循环。不同之处在于莫尔斯的多个角色构成一个单一的英文角色。因此,跟踪局部变量中的那些。当您在莫尔斯找到一个空间时,找到匹配的英文字符。您可以遍历您的北欧数组寻找匹配项,或者在查找键是莫尔斯符号(类似于HashTable)的位置进行单独映射。当你找到一个竖线字符时,在找到你的局部变量中的字符后,你应该在继续之前添加一个英文空格来表示单词的边缘。