我正在拔头发...
是的,它到处都贴了,不,似乎无法掩盖我的错误。我知道我正在尝试处理字符和字符串的细微差别。但是我的输出没有帮助,所以也许其他人可以吗?以下是我得到的输出以及提供给我的代码。

输入:
...
没有输出

此输入
...-
输出
Ë
Ë
Ë

和这个输入

... | ---
输出
Ë
Ë
Ë

只有第一个摩尔斯“字符”(应为“ 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/

10-11 20:51