-1

私はあなたの助けを借りて私のモールス信号翻訳機をうまく使いこなしましたが、テキストに不明な文字が含まれている場合、空白にはまだ問題があります.

これは、ハッシュマップを使用しているときに単一の文字をモールス信号に変換するために使用する方法です (問題ありません!)

public String getMorseCode(char c) {
    char cUpper = Character.toUpperCase(c);
    if (charMap.containsKey(cUpper)) {
        return charMap.get(cUpper);
    } else {
        final String emptyString = "";
        return emptyString;
    }
}

この方法を使用して、エンコード方法を使用してテキストをモールス信号に変換します。

public String encode(String text) {
    StringBuilder sb1 = new StringBuilder();
    int i = 0;
    while (i < text.length()) {
        char c = text.charAt(i);
        if (c == ' ') {
            sb1.append("/");
            i++;
        } else {
            i = i + 1;
            sb1.append(getMorseCode(c));
        }
        sb1.append("*");
    }
    return sb1.toString().trim();
}

文の前後の空白は .trim() によって削除されます。モールスコードでは、単語間に 3 つの空白、文字間に 1 つの空白があります。テキストに不明な文字が含まれている場合は、その後に空白のない空の文字列 ("") が必要です。メソッド内の空白を / および * に変更して、どのように変化するかを確認しましたが、それでも同じ問題が発生しました。

これを実現するためにコードを変更する方法がわかりません! よろしくお願いします。

4

1 に答える 1

1

空の文字列を返したかどうかを確認する必要があります。空でない場合にのみ、空白を追加します。

while (i < text.length()) {
    char c = text.charAt(i);
    i++;
    if (c == ' ') {
        sb1.append("/");
    } else {
        String code = getMorseCode(c);
        if ( ! code.equals("") ) {
           sb1.append(code);
           sb1.append('*');
        }
    }
}

ところで、すべての文字を順番に処理しているので、forループはここよりも適切かもしれません..while

于 2015-02-14T10:29:00.430 に答える