在您的帮助下,我用莫尔斯电码翻译器做了很好的翻译,但如果文本中有未知字符,空格仍然存在问题。
这是我在使用哈希图时将单个字符转换为莫尔斯码的方法(没有问题!)
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个空格。如果文本中有一个未知的字符,那么应该有一个空字符串("),后面没有空格。我把方法中的空格改为/和*,看看情况如何变化,但仍然遇到了同样的问题。
我根本不知道如何更改我的代码来实现这一点!提前感谢您的帮助!
您需要检查是否返回了空字符串。只有当它不为空时,才添加空白。
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
更合适,因为您正在按顺序处理所有字符。。