我在你的帮助下使用我的莫尔斯电码转换器做了很好的事,但是如果文本中有未知的字符,那么空格仍有问题。
这是我在使用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个空格之间。如果文本中有一个未知的字符,那么应该有一个空字符串(“”),后面没有空格。我将方法中的空格更改为/和*以查看事情如何变化,但仍然存在同样的问题。
我根本不知道如何更改我的代码来实现这一目标! 在此先感谢您的帮助!
答案 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
更合适,因为你要按顺序处理所有字符。