有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java莫尔斯编码器空白删除

在你的帮助下,我用我的莫尔斯电码翻译程序做了很好的翻译,但是如果文本中有未知字符,则空格仍然存在问题

这是我在使用哈希映射时将单个字符转换为莫尔斯码的方法(这没问题!)

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();
}

通过删除句子前后的空格。修剪()。在莫尔斯电码中,单词之间有3个空格,字符之间有1个空格。如果文本中有未知字符,则应该有一个空字符串(“”),后面没有空格。我将方法中的空格改为/和*以查看情况如何变化,但还是遇到了同样的问题

我只是不知道如何更改我的代码来实现这一点! 提前感谢您的帮助


共 (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更合适,因为您正在按顺序处理所有字符