我正在拔头发...
是的,它到处都贴了,不,似乎无法掩盖我的错误。我知道我正在尝试处理字符和字符串的细微差别。但是我的输出没有帮助,所以也许其他人可以吗?以下是我得到的输出以及提供给我的代码。
输入:
...
没有输出
此输入
...-
输出
Ë
Ë
Ë
和这个输入
... | ---
输出
Ë
Ë
Ë
只有第一个摩尔斯“字符”(应为“ 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);
}
我没有任何编译错误。该代码工作正常,我刚刚告诉了它错误的指令,因此我的输出不是我想要的。在我看来,扫描仪正在输入莫尔斯电码,例如'...',并将其翻译为三个e而不是单个s。我尝试过排除(if(!。contains))(或多或少)的情况,但是它不起作用,而且似乎条件过高。
我觉得我只是没有以正确的方式对待正确的对象。真的,如果第二种情况(两个摩尔斯字符,用空格隔开)可以起作用,我会很好。在这一点上,一个摩尔斯角色可能要求太多。
重大问题:我在哪里告诉Java将三个点视为三个单独的字母可以吗?为什么?……我希望这会有所帮助。
最佳答案
您的代码有两个问题:
由于|
是regex metacharacter,因此您需要使用例如morseSentence.split("[|]")
对其进行转义,并且
您在内部循环中使用了错误的length
:应该是morseArray.length
而不是words.length
morseArray
中的所有字符串都是唯一的,因此一旦找到匹配项,就可以在嵌套循环中设置break
。
Demo.
注意:您可以受益于关联容器来进行映射而无需循环(Map<K,V>
)。
关于java - Java-莫尔斯 split ,无法识别单个莫尔斯字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46516863/