我拔出我的头发...... 是的,它已经发布了所有并且没有,似乎无法绕过我的错误。我知道我正在努力处理字符和字符串的细微差别。但我的输出没有帮助,也许其他人可以?下面是我得到的输出和给我的代码。
输入:
的 ...
没有输出
此输入
...... ---
输出
Ë
Ë
ë
和此输入
... | ---
输出
Ë
Ë
ë
只有第一个莫尔斯“字符”(应该是's'),忽略管道和/或空间后的休息
public static void morseToEnglish() {
String englishArray[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
String morseArray[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".--- ", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
//String translatedText = "";
//String newEnglishChar;
System.out.println("Enter Morse, separate each letter or digit with a single space, separate words with '|' ");
Scanner input = new Scanner(System.in);
String morseSentence = input.nextLine();
String[] words = morseSentence.split("|");
for (String word: words) {
String[] morseChars = word.split(" ");
for (String morseChar : morseChars) {
if (morseChar.isEmpty()) { continue; }
for (int i = 0; i < words.length; i++) {
if (morseChar.equals(morseArray[i])) {
System.out.println(englishArray[i]);
//newEnglishChar = englishArray[i];
//translatedText = translatedText + newEnglishChar;
}
}
}
}
//System.out.println(translatedText);
}
我没有收到任何编译错误。代码工作正常,我刚刚告诉它错误的指令,所以我的输出不是我喜欢的。在我看来,Scanner正在输入莫尔斯,例如, '...',并将其翻译成三个e而不是单个s。我曾尝试过例外(如果(!。包含))(或多或少),但它不起作用,似乎是过度的条件。 我觉得我只是没有以正确的方式对待正确的物体。真的,如果第二种情况(两个莫尔斯字符,用空格分隔)可以起作用,我会没事的。在这一点上,单个莫尔斯角色可能太多了。 一个大问题:我在哪里告诉Java,将三个点视为三个单独的字母是可以的?为什么?......我希望这有帮助。
答案 0 :(得分:1)
您的代码有两个问题:
|
是regex metacharacter,因此您需要使用例如morseSentence.split("[|]")
和length
:应该是morseArray.length
而不是words.length
morseArray
中的所有字符串都是唯一的,因此您可以在找到匹配项后在嵌套循环中设置break
。
注意:您可以从关联容器中受益,无需循环(Map<K,V>
)即可进行映射。
答案 1 :(得分:1)
您编写的代码存在几个问题。
数据结构选择不当,对于此用例,您最好使用Map
,因为您要关联2个值。
你在正则表达式中使用的字符串不是好的,你需要逃避它
通过避免使用局部变量
这是您想要的工作版本
public static Map<String, String> init() {
HashMap<String, String> map = new HashMap<>();
map.put(".", "e");
map.put("...", "h");
//... All the other letters
return map;
}
public static void main(String ... args) {
Map<String, String> map = init();
System.out.println("Enter Morse, separate each letter or digit with a single space, separate words with '|' ");
Scanner input = new Scanner(System.in);
String morseSentence = input.nextLine();
for (String word: morseSentence.split("\\|")) {
for (String morseChar : word.split(" ")) {
if (!morseChar.isEmpty()) {
System.out.print(map.get(morseChar));
}
}
System.out.print(" ");
}
}