莫尔斯编码器空白删除

时间:2015-02-14 10:15:00

标签: java removing-whitespace morse-code

我在你的帮助下使用我的莫尔斯电码转换器做了很好的事,但是如果文本中有未知的字符,那么空格仍有问题。

这是我在使用hashmaps时将单个char转换为morse代码的方法(没有问题!)

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()删除句子前后的空格。在morsecode之间,单词是3个空格,在1个空格之间。如果文本中有一个未知的字符,那么应该有一个空字符串(“”),后面没有空格。我将方法中的空格更改为/和*以查看事情如何变化,但仍然存在同样的问题。

我根本不知道如何更改我的代码来实现这一目标! 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分: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更合适,因为你要按顺序处理所有字符。