Codigo Morse?

Boa Noite Galera , estou fazendo um projeto para converter português para código morse e vise versa,
já fiz a do português para morse, mais estou com duvida de como fazer de morse para português.
Alguém pode me ajudar?
esse é o código de conversão para morse.

package chatemjava;
import java.awt.*;
import java.awt.event.*;

// Pacotes de extensao de Java
import javax.swing.*;

public class Morsenizer extends JFrame {
   // Dados do programa
  
   
   private String entrada, // O texto de entrada
      saida; // O texto de saida
   
   // Componentes graficos da interface com o usuario
   private JLabel lblEntrada, lblSaida;
   private JTextField txtFldEntrada, txtFldSaida;
   private JButton btnAjuda, btnSobre;
   
   // O construtor da classe
   public Morsenizer ()
   {
      super( "Morsenizer" );
      
      Container container = getContentPane();
      container.setLayout( new FlowLayout() );
      
      lblEntrada =
         new JLabel ( "Digite a String a ser convertida e tecle <ENTER>" );
      container.add( lblEntrada );
      
      txtFldEntrada = new JTextField( 50 );
      
      txtFldEntrada.addActionListener (
         new ActionListener () {
            // Tratando o evento do campo texto
	    public void actionPerformed ( ActionEvent event )
	    {
	       String s = event.getActionCommand();
	       entrada = String.valueOf( s );
	       constroiSaida();
	    }
	 }
      ); // Chamada final ao Action Listener
      
      container.add( txtFldEntrada );
      
      lblSaida =
         new JLabel ( "Código Morse equivalente" );
      container.add( lblSaida );
      
      txtFldSaida = new JTextField( 50 );
      txtFldSaida.setEditable( false );
      container.add( txtFldSaida );
      
     // btnAjuda = new JButton( "Ajuda" );
      
      //btnAjuda.addActionListener (
        // new ActionListener () {
	 //   public void actionPerformed ( ActionEvent actionEvent )
	  //  {
	      // JOptionPane.showMessageDialog( null,
	       //   "O código Morse é, provavelmente, o mais famoso esquema de\n" +
		//  "codificação de todos os tempos. Ele foi desenvolvido por\n" +
		//  "Samuel Morse em 1832 para ser utilizado com o sistema de telégrafo.\n" +
		//  "O código Morse associa uma série de pontos e traços (um para\n" +
		//  "cada letra do alfabeto, dígito e alguns caracteres especiais).\n" +
		//  "Em sistemas orientados por áudio, o ponto representa um som curto\n" +
		//  "e o traço representa um som longo.\n" +
		//  "A separação entre palavras é indicada por um espaço, ou, simples-\n" +
		 // "mente, a ausência de um ponto ou traço. Em um sistema baseado em\n" +
		 // "áudio, o espaço é indicado por um período breve de tempo durante\n" +
		 // "o qual não se transmite nenhum som.\n" +
		 // "\t\t\tTexto retirado do livro Java: Como Programar - 4a. edição",
		 // "Ajuda",
		 // JOptionPane.INFORMATION_MESSAGE );
	  //  }
	// }
    //  );
      
     // container.add( btnAjuda );
      
      
      setSize( 600, 125 ); // Configurando o tamanho da janela
      setResizable( false ); // Nao permitindo a alteracao das dimensoes da janela
      show(); // Mostra a janela
   }
   
   // Converte uma String de ASCII para Morse, retornando-a
   public String conversorASCIIMorse ( String stringASCII )
   {
      String retorno = "";
      
      for ( int i = 0; i < stringASCII.length(); i++ )
         switch ( Character.toUpperCase( stringASCII.charAt( i ) ) ) {
	    case 'A': retorno += ".- ";
	              break;
	    case 'B': retorno += "-... ";
	              break;
	    case 'C': retorno += "-.-. ";
	              break;
	    case 'D': retorno += "-.. ";
	              break;
	    case 'E': retorno += ". ";
	              break;
	    case 'F': retorno += "..-. ";
	              break;
	    case 'G': retorno += "--. ";
	              break;
	    case 'H': retorno += ".... ";
	              break;
	    case 'I': retorno += ".. ";
	              break;
	    case 'J': retorno += ".--- ";
	              break;
	    case 'K': retorno += "-.- ";
	              break;
	    case 'L': retorno += ".-.. ";
	              break;
	    case 'M': retorno += "-- ";
	              break;
	    case 'N': retorno += "-. ";
	              break;
	    case 'O': retorno += "--- ";
	              break;
	    case 'P': retorno += ".--. ";
	              break;
	    case 'Q': retorno += "--.- ";
	              break;
	    case 'R': retorno += ".-. ";
	              break;
	    case 'S': retorno += "... ";
	              break;
	    case 'T': retorno += "- ";
	              break;
	    case 'U': retorno += "..- ";
	              break;
	    case 'V': retorno += "...- ";
	              break;
	    case 'W': retorno += ".-- ";
	              break;
	    case 'X': retorno += "-..- ";
	              break;
	    case 'Y': retorno += "-.-- ";
	              break;
	    case 'Z': retorno += "--.. ";
	              break;
	    case '0': retorno += "----- ";
	              break;
	    case '1': retorno += ".--- ";
	              break;
	    case '2': retorno += "..--- ";
	              break;
	    case '3': retorno += "...-- ";
	              break;
	    case '4': retorno += "....- ";
	              break;
	    case '5': retorno += "..... ";
	              break;
	    case '6': retorno += "-.... ";
	              break;
	    case '7': retorno += "--... ";
	              break;
	    case '8': retorno += "---.. ";
	              break;
	    case '9': retorno += "----. ";
	              break;
	    
	    // O espaco em branco nao consta no codigo Morse.
	    // No codigo, o espaco em branco eh representado
	    //    por um intervalo de tempo sem transmissao de
	    //    informacoes.
	    case ' ': retorno += "   ";
	              break;
	    
	    default: // Caracter nao suportado
	             break;
	 } // switch
      
      return retorno; 
   }
   
   // Constroi as informacoes de saida do programa
   public void constroiSaida ()
   {
      saida = conversorASCIIMorse( entrada );
      txtFldSaida.setText( saida );
   }
   
   // Executa o aplicativo
   public static void main ( String args[] )
   {
      Morsenizer aplicacao = new Morsenizer();
      
      aplicacao.addWindowListener (
         new WindowAdapter() {
	    public void windowClosing ( WindowEvent windowEvent )
	    {
	       System.exit( 0 );
	    }
	 }
      );
   }
}

Se você está utilizando espaços para realizar a separação de letras, uma solução seria percorrer a string informada e colocar um comparativo de pedaços da string.

Algo mais ou menos assim:

public static String getLetra(String morse) {
/* Coloque todas as letras aqui */
if (morse.equals(".-")) {
return “A”;
} else if (morse.equals("-…")) {
return “B”;
} else if (morse.equals("-.-.")) {
return “C”;
}

return "?";

}

public static void main(String[] args) {
/* Simulando uma entrada de texto em código morse /
String textoMorse = ".- -… -.-. -.-. .- -… ".trim();
/
Nosso retorno */
String textoAlfabeto = “”;

while (textoMorse != null) {
  int posic = textoMorse.indexOf(" ");
  String trecho;

  if (posic == -1) {
    trecho = textoMorse;
    textoMorse = null;
  } else {
    trecho = textoMorse.substring(0, textoMorse.indexOf(" "));
    textoMorse = textoMorse.substring(trecho.length()).trim();
  }
  
  textoAlfabeto += getLetra(trecho);
}

System.out.println(textoAlfabeto);

}

quando eu compilo está dando esse erro agora, já modifiquei tudo que poderia ser mais ainda continua:

ant -f C:\Users\host\Desktop\APS\ChatEmJava -Djavac.includes=chatemjava/Portugues.java -Dnb.internal.action.name=run.single -Drun.class=chatemjava.Portugues run-single
init:
Deleting: C:\Users\host\Desktop\APS\ChatEmJava\build\built-jar.properties
deps-jar:
Updating property file: C:\Users\host\Desktop\APS\ChatEmJava\build\built-jar.properties
Compiling 1 source file to C:\Users\host\Desktop\APS\ChatEmJava\build\classes
Note: C:\Users\host\Desktop\APS\ChatEmJava\src\chatemjava\Portugues.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
compile-single:
run-single:
Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: javax.swing.JTextField cannot be cast to java.lang.Character
at chatemjava.Portugues$1.actionPerformed(Portugues.java:36)
at javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
at javax.swing.JTextField.postActionEvent(JTextField.java:721)
at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2882)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2929)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2845)
at java.awt.Component.processEvent(Component.java:6312)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4762)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Classe para conversão morse-ascii e vice-versa:

public final class Morse {

	private static final class Simbolo {

		public final char normal;
		public final String morse;

		Simbolo(char normal, String morse) {
			this.normal = normal;
			this.morse = morse;
		}
	}

	private static final Simbolo[] SIMBOLOS = new Simbolo[] {
	        new Simbolo('A', ".-"),
	        new Simbolo('B', "-..."),
	        new Simbolo('C', "-.-."),
	        new Simbolo('D', "-.."),
	        new Simbolo('E', "."),
	        new Simbolo('F', "..-."),
	        new Simbolo('G', "--."),
	        new Simbolo('H', "...."),
	        new Simbolo('I', ".."),
	        new Simbolo('J', ".---"),
	        new Simbolo('K', "-.-"),
	        new Simbolo('L', ".-.."),
	        new Simbolo('M', "--"),
	        new Simbolo('N', "-."),
	        new Simbolo('O', "---"),
	        new Simbolo('P', ".--."),
	        new Simbolo('Q', "--.-"),
	        new Simbolo('R', ".-."),
	        new Simbolo('S', "..."),
	        new Simbolo('T', "-"),
	        new Simbolo('U', "..-"),
	        new Simbolo('V', "...-"),
	        new Simbolo('W', ".--"),
	        new Simbolo('X', "-..-"),
	        new Simbolo('Y', "-.--"),
	        new Simbolo('Z', "--.."),
	        new Simbolo('0', "-----"),
	        new Simbolo('1', ".---"),
	        new Simbolo('2', "..---"),
	        new Simbolo('3', "...--"),
	        new Simbolo('4', "....-"),
	        new Simbolo('5', "....."),
	        new Simbolo('6', "-...."),
	        new Simbolo('7', "--..."),
	        new Simbolo('8', "---.."),
	        new Simbolo('9', "----."),
	        new Simbolo(' ', "   ")
	};

	public static String morse(String normal) {
		StringBuilder textMorse = new StringBuilder();
		for (char letraNormal : normal.toUpperCase().toCharArray()) {
			if (textMorse.length() > 0) {
				textMorse.append(" ");
			}
			textMorse.append(letraMorse(letraNormal));
		}
		return textMorse.toString();
	}

	public static String normal(String morse) {
		StringBuilder textNormal = new StringBuilder();
		String[] palavrasMorse = morse.split("\\Q   \\E");
		for (String palavraMorse : palavrasMorse) {
			if (textNormal.length() > 0) {
				textNormal.append(" ");
			}
			String[] letrasMorse = palavraMorse.trim().split(" ");
			for (String letraMorse : letrasMorse) {
				textNormal.append(letraNormal(letraMorse));
			}
		}
		return textNormal.toString();
	}

	private static String letraMorse(char normal) {
		for (Simbolo simbolo : SIMBOLOS) {
			if (simbolo.normal == normal) {
				return simbolo.morse;
			}
		}
		throw new IllegalArgumentException("Símbolo inválido: \"" + normal + "\"");
	}

	private static char letraNormal(String morse) {
		for (Simbolo simbolo : SIMBOLOS) {
			if (simbolo.morse.equals(morse)) {
				return simbolo.normal;
			}
		}
		throw new IllegalArgumentException("Símbolo inválido: \"" + morse + "\"");
	}

	private Morse() {}
}

Exemplo de uso:

public class Exemplo {

	public static void main(String args[]) {
		Exemplo programa = new Exemplo();
		programa.executar();
	}

	private void executar() {
		String texto = "Ola coleguinhas do GUJ";
		String morse = Morse.morse(texto);
		String normal = Morse.normal(morse);
		System.out.println("Texto:  \"" + texto + "\"");
		System.out.println("Morse:  \"" + morse + "\"");
		System.out.println("Normal: \"" + normal + "\"");
	}
}

Se executar o exemplo acima, irá obter a seguinte saída:

Texto:  "Ola coleguinhas do GUJ"
Morse:  "--- .-.. .-     -.-. --- .-.. . --. ..- .. -. .... .- ...     -.. ---     --. ..- .---"
Normal: "OLA COLEGUINHAS DO GUJ"
2 curtidas