1

クラスでは、二分木を使用してモールス信号プログラムを作成する必要があります。ユーザーがモールス符号を入力すると、プログラムはそれをデコードして結果を出力します。二分木は AZ のみを保持します。また、ダッシュ、ドット、およびスペースのみを読み取る必要があります。文字の末尾にスペースが 1 つある場合。単語の終わりである行に 2 つ以上のスペースがある場合。

文字列入力に連続したスペースがあるかどうかをどのように検出しますか? 現在、2つある場合は検出する場所をプログラムしていますが(スペースが出力されます)、3つ以上のスペースがあることを認識している場所に配置する方法がわかりません。

これは私が入力を読んでいる方法です:

String input =  showInputDialog( "Enter Code", null);
character = input.charAt(i);

そして、これがスペースを検出する方法です: if (character == ' ').

誰でも助けることができますか?

4

4 に答える 4

1

注: 一度に 1 文字ずつではなく、完全なモールス符号メッセージを一度に取得していると仮定しています。

この点に着目すると、「文字の末尾にスペースが 1 つある場合。単語の末尾にスペースが 2 つ以上連続している場合」です。

個人的にはsplit()、String クラスのメソッドを使用します。これにより、文字列が String[] に分割され、配列内の個々の文字列に対していくつかのチェックを行うことができます。このようにスペース文字で分割すると、いくつかの動作上の利点が得られます。

  1. 文字を表す文字列には、末尾または先頭にスペースがありません
  2. 複数のスペースのシーケンスは、返される String[] で空の文字列になります。

たとえば、文字列 "AB C" に対して split(" ") を呼び出すと、{"A", "B", "", "C"} を含む String[] が得られます。

これを使用して、最初に空の文字列が表示されるかどうかを確認します。この場合、入力モールス符号メッセージに少なくとも 2 つのスペース文字が隣り合っていることを意味します。次に、最初の文字列の後に発生する空の文字列を無視するだけで、任意の数の連続した空の文字列に対応できます。

割り当てを完了させたくない場合は、サンプル コードを次に示します。

public String decode(final String morseCode) {
    final StringBuilder decodedMessage = new StringBuilder();

    final String[] splitMorseCode = morseCode.split(" ");

    for (final String morseCharacter : splitMorseCode) {
        if( "".equals(morseCharacter) ) {
            /* We now know we had at least 2 spaces in sequence
             * So we check to see if we already added a space to spearate the 
             * resulting decoded words. If not, then we add one. */
            if ( !decodedMessage.toString().endsWith(" ") ) {
                decodedMessage.append(" ");
            }
            continue;
        }

        //Some code that decodes your morse code character.
    }

    return decodedMessage.toString();
}

簡単なテストも書きました。私の例では、「--」を「M」に変換しました。デコードされたメッセージをスペース文字で分割することは、デコードされた個々の単語をカウントする方法でした。

@Test
public void thatDecoderCanDecodeMultipleWordsSeparatedByMultipleSpaces() {
    final String decodedMessage = this.decoder.decode("-- --  -- --   -- --    -- --     -- --       -- --        -- --");

    assertThat(decodedMessage.split(" ").length, is(7));
    assertThat(decodedMessage, is("MM MM MM MM MM MM MM"));
}

もちろん、これでも意味が分からない場合は、APIを読むことが常に役に立ちます。

于 2013-10-31T17:47:29.730 に答える
0

これは役に立ちます。

public class StringTester {
    public static void main(String args[]){
        String s="Hello  ";
        int count=0;
        char chr[]= s.toCharArray();
       for (char chr1:chr){
           if(chr1==' ')
                  count++;
       }
        if(count>=2)
            System.out.println(" I got more than 2 spaces")   ;
    }
于 2013-10-31T19:28:27.317 に答える