0

私はJavaモールス信号翻訳者を作ったばかりですが、モールス信号を英語に変換すると、各記号が文字として変換されるので、翻訳すると.... hの代わりにeeeeが返されます。だから私の質問は、モールス信号で単語全体を翻訳して | を使用できるようにするにはどうすればよいかということです。言葉を区切ること。

ここに私のコードがあります

public class project1 {

public static void main ( String [] args ) {

char [] english = { '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', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };

String [] morse = { ".-" , "-..." , "-.-." , "-.." , "." , "..-." , "--." , "...." , ".." , ".---" , "-.-" , ".-.." , "--" , "-." , "---" , ".--." , "--.-" ,  ".-." , "..." , "-" , "..-" , "...-" , ".--" , "-..-" , "-.--" , "--.." , "|" };
    String a = Input.getString ( "Please enter MC if you want to translate Morse Code into English, or Eng if you want to translate from English into Morse Code" );
if (a.equals("MC"))
    {
        String b = Input.getString ("Please enter a sentence in Morse Code. Separate each letter/digit with a single space and delimit multiple words with a | .");    

        String[] words = b.split("|");
        for (String word: words )
        {
            String[] characters = word.split(" ");
            for (String character: characters) 
            {
                if (character.isEmpty()) { continue; }
        for (int m = 0; m < morse.length; m++)
                {
                    if (character.equals(morse[m]))    
                        System.out.print(english[m]);    
                }    
            }
            System.out.print(" ");    
        }    
    }
else if (a.equals("Eng"))
    {
        String c = Input.getString ( "Please enter a sentence in English, and separate each word with a blank space." );

        c = c.toLowerCase ();

        for ( int x = 0; x < english.length; x++ )
        {
            for ( int y = 0; y < c.length (); y++ )
            {
                if ( english [ x ] == c.charAt ( y ) )

                System.out.print ( morse [ x ] + "  " );


            }

        }


    }

    else 
   {
       System.out.println ( "Invalid Input" );

    }

}
}
4

2 に答える 2

0

あなたが抱えている問題は、String#split(...)メソッドが|正規表現に関する特殊文字を考慮しておらず、期待どおりに文字列を分割していないことです。正しく機能させるには、この文字をエスケープする必要があります。したがって、これを変更します。

String[] words = b.split("|");

これに:

String[] words = b.split("\\|"); // escaping the pipe char

デバッグして、期待どおりに動作しているかどうかを確認するには、デバッガーを使用するか、次のようにコードに println を振りかけます。

 String[] words = b.split("\\|");

 // TODO: remove line below from finished program
 System.out.println(java.util.Arrays.toString(words)); 

余談ですが、これが私のプログラムである場合、HashMap<String, String>英語からモールスへの翻訳、およびその逆の翻訳を支援するために使用します。

実行したばかりのさらなる検索については、チェックアウトしてください:なぜ String.split はパイプ区切り文字をエスケープする必要があるのですか? パイプ char をエスケープする必要がある理由の背景情報については、 を参照してください。

于 2015-05-30T21:07:02.347 に答える