首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -拆分morse,不识别单个morse字符

Java -拆分morse,不识别单个morse字符
EN

Stack Overflow用户
提问于 2017-10-01 21:01:54
回答 2查看 59关注 0票数 0

我在拔头发…是的,它到处都贴了,不,似乎不能掩盖我的错误。我明白我在努力处理字符和字符串的细微差别。但我的产出没有帮助,所以也许其他人可以?下面是我得到的输出和给我的代码。

输入:

无输出

这个输入

.-

输出

E

E

E

而这个输入

.-

输出

E

E

E

只有第一个莫尔斯“字符”(应该是's'),忽略了管道和/或空间之后的休息。

代码语言:javascript
复制
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正在输入摩尔斯,例如“.”,并把它翻译成“3e”而不是一个“s”。我试过例外情况(if(!.contains)) (或多或少),但它不起作用,而且似乎条件过高。我觉得我只是没有以正确的方式对待正确的对象。真的,如果第二种情况(两个莫尔斯字符,由一个空格隔开)起作用,我就没问题了。在这一点上,一个莫尔斯的角色可能要求太多了。最重要的问题是:我在哪里告诉Java,把三个点看作三个单独的字母是可以的?为什么?.我希望这是有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2017-10-01 21:18:25

您的代码有两个问题:

  • 因为|是一个https://stackoverflow.com/q/3674930/335858,所以您需要使用(例如,morseSentence.split("[|]") )和
  • 您在内部循环中使用了错误的length:应该是morseArray.length而不是words.length

morseArray中的所有字符串都是唯一的,因此一旦找到匹配项,就可以在嵌套循环中设置break

演示。

注意:--您可以从一个关联容器中受益,在没有循环(Map)的情况下完成映射。

票数 1
EN

Stack Overflow用户

发布于 2017-10-01 21:20:44

在您编写的代码中有几个问题。

  1. 数据结构没有很好的选择,对于这个用例,您应该更好地使用Map,因为您正在关联2个值。
  2. 在regex中使用的字符串不是很好的字符串,您需要转义它。
  3. 通过避免使用局部变量,可以提高代码的可读性。

这是你想要的一个实用版本

代码语言:javascript
复制
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(" ");
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46516863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档