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

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

只是旁注,我的老师不喜欢Scanner,所以他使用自己的输入系统。 我熟悉他的方法,所以避免使用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代码看起来不连贯和糟糕,我尝试了许多不同的东西而且不知所措。

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

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

morseToEnglish应该与englishToMorse算法相反。

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