Java-分割莫尔斯,不识别单个莫尔斯字符

Java-分割莫尔斯,不识别单个莫尔斯字符,java,Java,我在拔头发… 是的,到处都贴着,不,我似乎不能对我的错误保持清醒。我知道我在尝试处理字符和字符串的细微差别。但是我的输出没有帮助,所以也许其他人可以?下面是我得到的输出和给我的代码 输入: .. 无输出 此输入 --- 输出 e e e 这个输入 …|-- 输出 e e e 只有第一个莫尔斯“字符”(应为“s”)忽略管道和/或空格后的剩余字符 public static void morseToEnglish() { String englishArray[] = {"a", "b",

我在拔头发… 是的,到处都贴着,不,我似乎不能对我的错误保持清醒。我知道我在尝试处理字符和字符串的细微差别。但是我的输出没有帮助,所以也许其他人可以?下面是我得到的输出和给我的代码

输入:
..
无输出

此输入
---
输出
e
e
e

这个输入

…|--
输出
e
e
e

只有第一个莫尔斯“字符”(应为“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);
}
公共静态无效morseToEnglish(){
字符串英文字符[]={“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”};
字符串morserray[]={“-”、“-…”、“-.-”、“-…”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”;
//字符串translatedText=“”;
//字符串newEnglishChar;
System.out.println(“输入莫尔斯,用一个空格分隔每个字母或数字,用“|”分隔单词”);
扫描仪输入=新扫描仪(System.in);
字符串morseContent=input.nextLine();
String[]words=morssentence.split(“|”);
for(字符串字:字){
String[]morseChars=word.split(“”);
for(字符串morseChar:morseChars){
if(morseChar.isEmpty()){continue;}
for(int i=0;i
我没有收到任何编译错误。代码运行良好,我只是告诉它错误的指令,所以我的输出不是我想要的。在我看来,扫描器正在输入莫尔斯电码,例如“…”,并将其翻译为三个e而不是一个s。我尝试过例外情况(如果(!.contains))(或多或少),但它不起作用,而且似乎条件太苛刻。 我觉得我只是没有以正确的方式对待正确的对象。真的,如果第二种情况(两个莫尔斯字符,用空格分隔)能够正常工作,我会很好。在这一点上,一个莫尔斯字符可能太多了。
大问题:我在哪里告诉Java可以将三个点视为三个独立的字母?为什么?。。。。。。我希望这会有所帮助。

您的代码有两个问题:

  • 由于
    |
    是一个,因此您需要使用
    morsecontent.split(“[|]”)和
  • 您在内部循环中使用了错误的
    length
    :应该是
    morserray.length
    而不是
    words.length
morserray
中的所有字符串都是唯一的,因此一旦找到匹配项,就可以在嵌套循环中设置一个
break


注意:您可以使用关联容器进行映射,而无需循环()。

您的代码有两个问题:

  • 由于
    |
    是一个,因此您需要使用
    morsecontent.split(“[|]”)和
  • 您在内部循环中使用了错误的
    length
    :应该是
    morserray.length
    而不是
    words.length
morserray
中的所有字符串都是唯一的,因此一旦找到匹配项,就可以在嵌套循环中设置一个
break


注意:您可以使用关联容器来进行映射,而无需循环()。

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

  • 数据结构选择得不好,对于这个用例,您最好使用
    Map
    ,因为您关联了两个值

  • 您在正则表达式中使用的字符串不是好字符串,您需要对其进行转义

  • 通过避免使用局部变量,可以使代码更具可读性

  • 这是你想要的工作版本

    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(" ");
        }
    }
    
    publicstaticmap init(){
    HashMap=newHashMap();
    地图放置(“.”,“e”);
    地图放置(“…”,“h”);
    //…所有其他信件
    返回图;
    }
    公共静态void main(字符串…参数){
    Map=init();
    System.out.println(“输入莫尔斯,用一个空格分隔每个字母或数字,用“|”分隔单词”);
    扫描仪输入=新扫描仪(System.in);
    字符串morseContent=input.nextLine();
    for(字符串字:morssentence.split(“\\\\”)){
    for(字符串morseChar:word.split(“”){
    如果(!morseChar.isEmpty()){
    系统输出打印(map.get(morseChar));
    }
    }
    系统输出打印(“”);
    }
    }
    
    您编写的代码中有几个问题

  • 数据结构选择得不好,对于这个用例,您最好使用
    Map
    ,因为您关联了两个值

  • 您在正则表达式中使用的字符串不是好字符串,您需要对其进行转义

  • 通过避免使用局部变量,可以使代码更具可读性

  • 这是你想要的工作版本

    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(" ");
        }
    }
    
    publicstaticmap init(){
    HashMap=newHashMap();
    地图放置(“.”,“e”);
    地图放置(“…”,“h”);
    //…所有其他信件
    返回图;
    }
    公共静态void main(字符串…参数){
    Map=init();
    System.out.println(“输入莫尔斯,用一个空格分隔每个字母或数字,用“|”分隔单词”);
    扫描仪输入=新扫描仪(System.in);
    字符串morseContent=input.nextLine();
    for(字符串字:morssentence.split(“\\\\”)){
    for(字符串):单词