Java: Конвертер MorseCode
Я пытаюсь преобразовать код Морзе в текст.
у меня есть два текстовых файла для использования с этой проблемой. morseCode.txt: у меня есть файл, который я прочитал, который содержит буквы и соответствующий эквивалент кода Морзе.
Морзе.dat: это файл, содержащий зашифрованное сообщение в коде Морзе
я смог правильно прочитать первый файл, а затем сохранить в отдельные массивы. Я протестировал его, распечатав массив для букв и кода Морзе массива и оказалось, что он хранил его правильно и в порядке.
у меня возникли проблемы с чтением сообщения второго файла. Это 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 ----.
. .-.-.-
, --..--
? ..--..
это сообщение.текстовый файл выглядит так:
- .... .. ...
.. ...
.-
- . ... -
.--. .-. --- --. .-. .- -- .-.-.-
.. ..-.
-.-- --- ..-
... . .
- .... .. ...
-- . ... ... .- --. .
- .... .- -
.. ...
--. --- --- -..
-. . .-- ...
-.-- --- ..- .-.
.--. .-. --- --. .-. .- --
.-- --- .-. -.- ... .-.-.-
его предполагается ouput:
THIS IS A TEST PROGRAM.
IF YOU SEE THIS MESSAGE THAT IS GOOD NEWS YOUR PROGRAM WORKS.
+++ЭТО МОЕ РЕШЕНИЕ.+++
/*
*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();
}
}
2 ответов
у вас будет проблема с использованием сканера для анализа Морзе.DAT-файл, потому что есть два типа разделитель - пробел и новая строка. Самый простой способ-прочитать одну строку за раз с помощью BufferedReader и разделить строку на пробел. Вот код для этого. Я избегал использовать методы, потому что вы еще не узнали о них.
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(' ');
}
}
}
}
выход выше программы:
THIS IS A TEST PROGRAM.
IF YOU SEE THIS MESSAGE THAT IS GOOD NEWS YOUR PROGRAM WORKS.
Я надеюсь, что помогает!
while (data.hasNext()) { //read in letter words[e] = message[e].indexOf(" ");
учитывая, что вы открываете файл как data
и на самом деле не делать ничего с ним, я не удивлен, что он не работает.
вы хотите получить индивидуальные маркеры из файла данных, а затем посмотреть их индекс в массиве Морзе.