Java: MorseCode Converter

I am trying to convert morse code to text.

I have two text files to use with this problem. morseCode.txt: I have a file that I am reading that contains letters and the corresponding Morse code equivalent.

morse.dat: file containing an encrypted message in Morse code

I was able to read the first file correctly and then save it in separate arrays. I tested it by printing an array for letters and massive Morse code and found that it saved it correctly and in order.

I'm having trouble reading the message of the second file. This is the key morseCode.txt:

A .- B -... C -.-. D -.. E . F ..-. G --. H .... I .. J .--- K -.- L .-.. M -- N -. O --- P .--. Q --.- R .-. S ... T - U ..- V ...- W .-- X -..- Y -.-- Z --.. 0 ----- 1 .---- 2 ..--- 3 ...-- 4 ....- 5 ..... 6 -.... 7 --... 8 ---.. 9 ----. . .-.-.- , --..-- ? ..--.. 

Here's what the Message.txt file looks like:

  - .... .. ... .. ... .- - . ... - .--. .-. --- --. .-. .- -- .-.-.- .. ..-. -.-- --- ..- ... . . - .... .. ... -- . ... ... .- --. . - .... .- - .. ... --. --- --- -.. -. . .-- ... -.-- --- ..- .-. .--. .-. --- --. .-. .- -- .-- --- .-. -.- ... .-.-.- 

Estimated Conclusion:

 THIS IS A TEST PROGRAM. IF YOU SEE THIS MESSAGE THAT IS GOOD NEWS YOUR PROGRAM WORKS. 

+++ THIS IS MY DECISION. +++

 /* *This is a program that translates Morse Code to English text. The key is read from a file. * *The file contains the equivalent letters and Morse code. The entire key is stored in an array for reference. * *A second file contains the encrypted message. The program reads the message file and converts individual Morse code * *letters into alphabet letters. The results are displayed and printed out to another file. */ import java.io.*; import java.util.Scanner; //file writer and print writer to save the output public class Assignment4 { @SuppressWarnings("null") public static void main (String [] args) throws IOException { //arrays for letters and Morse Code values String[] letter = new String[39], morseCode = new String[39]; //this is the file with the letters and morse code equivalent File file1 = new File ("c:/morseCode.txt"); Scanner in = new Scanner(file1); int i = 0; while (in.hasNext()) { //read in letter letter[i] = in.next(); //read in Morse Code morseCode[i] = in.next(); i++; } //this is the file with encrypted message String morseLine, morseLetter, theLetter = " "; //this file contains the encrypted message File file2 = new File ("c:/morse.dat"); Scanner data = new Scanner(file2); //this appends the data to the file and keeps a running input FileWriter fWriter = new FileWriter("c:/Message.txt", true); PrintWriter outPutFile = new PrintWriter(fWriter); boolean found; int number = morseCode.length; while (data.hasNext()) { //reads each line of mesage morseLine = data.nextLine(); i = 0; int j = 0, k = 0; j = morseLine.indexOf(" "); while (j != -1) { //determines the end of a letter in Morse code and stores the morseLetter = morseLine.substring(i, j); found = false; k = 0; theLetter = " "; //this loop searches the array of morseCode for the equal Morse code letter //then it assigns the corresponding letter that is equivalent while (k < number && !found) { if (morseLetter.equals(morseCode[k])) { theLetter = letter[k]; found = true; } else { k++; } } //this condition prints the equivalent letter of the Morse code letter //on the message if (!theLetter.equals(" ")) { System.out.print(theLetter); outPutFile.print(theLetter); } i = j + 1; j = morseLine.indexOf(" ", i); } if(theLetter.equals(".")) { //moves to the next line at the end of the sentence System.out.println(""); outPutFile.println(""); } else { //this separates the letters into words System.out.print(" "); outPutFile.print(" "); } } outPutFile.close(); } } 
+6
java morse-code
source share
2 answers

You will have a problem using Scanner to parse the morse.dat file, because there are two types of delimiter - space and new line. The easiest way is probably to read one line at a time using BufferedReader and split the line into space. Here is the code for this. I avoided using methods because you have not yet learned about them.

 import java.io.*; import java.util.*; public class Assignment4 { public static void main(String[] args) throws IOException { Map<String, String> morseCodes = new HashMap<String, String>(); File file1 = new File ("morsecode.txt"); Scanner in = new Scanner(file1); while (in.hasNext()) { String letter = in.next(); String code = in.next(); morseCodes.put(code, letter); } File morseCode = new File("message.txt"); BufferedReader bufferedReader = new BufferedReader(new FileReader(morseCode)); String line; while ((line = bufferedReader.readLine()) != null) { String letter = ""; for (String morseLetter: line.split(" ")) { letter = morseCodes.get(morseLetter); System.out.print(letter); } if (letter.equals(".")) { // Insert a new line after a period. System.out.println(); } else { // Insert a space between words. System.out.print(' '); } } } } 

Program Output:

 THIS IS A TEST PROGRAM. IF YOU SEE THIS MESSAGE THAT IS GOOD NEWS YOUR PROGRAM WORKS. 

I hope this helps!

+3
source share
 while (data.hasNext()) { //read in letter words[e] = message[e].indexOf(" "); 

Given that you open the file as data and are not actually doing anything, I am not surprised that it does not work.

You want to get individual tokens from a data file, and then look at their index in your morse array.

+2
source share

All Articles