【问题标题】:Converting String number words to just String number:Java将字符串数字单词转换为字符串数字:Java
【发布时间】:2021-02-11 12:04:37
【问题描述】:

我是一名初学者编码器,正在尝试使用应该以这种方式工作的单词转换器:输入=“零;六;八;二”输出=“0682”。但就我而言,我得到的输出是“0282”。有什么解决办法吗?或者像也许我应该以不同的方式编程?我发现 LinkedLists 或 HashMap 可以工作,如果可以,你能告诉我怎么做吗?

Scanner scanner = new Scanner(System.in);
    String number = scanner.next();
            while (true) {
                String num = "";
                if(number.contains("zero"))
                    num = num + "0";
    
                if (number.contains("one"))
                    num = num + "1";
    
                if (number.contains("two"))
                    num = num +"2";
    
                if (number.contains("three"))
                    num = num + "3";
    
                if(number.contains("four"))
                    num = num + "4";
    
                if(number.contains("five"))
                    num = num + "5";
    
                if(number.contains("six"))
                    num = num + "6";
    
                if(number.contains("seven"))
                    num = num + "7";
    
                if(number.contains("eight"))
                    num = num + "8";
    
    
                System.out.println(number);
                System.out.println(num);
                break;
    
            }

【问题讨论】:

    标签: java string linked-list hashmap


    【解决方案1】:

    您应该在; 上拆分以分号分隔的输入,然后在循环中迭代每个术语:

    Scanner scanner = new Scanner(System.in);
    String input = scanner.next();
    String[] nums = input.split(";");
    String num = "";
    
    for (String number : nums) {
        if ("zero".equals(number))
            num = num + "0";
        else if ("one".equals(number))
            num = num + "1";
        else if ("two".equals(number))
            num = num + "2";
        else if ("three".equals(number))
            num = num + "3";
        else if ("four".equals(number))
            num = num + "4";
        else if ("five".equals(number))
            num = num + "5";
        else if ("six".equals(number))
            num = num + "6";
        else if ("seven".equals(number))
            num = num + "7";
        else if ("eight".equals(number))
            num = num + "8";
        else if ("nine".equals(number))
            num = num + "9";
    }
    
    System.out.println("input:  " + input);
    System.out.println("output: " + num);
    

    对于zero;six;eight;two 的输入,这是上述脚本的输出:

    input:  zero;six;eight;two
    output: 0682
    

    【讨论】:

      【解决方案2】:

      在这里我更喜欢使用HashMap。首先,您可以将数字映射初始化为文本到数字为int;喜欢

      private static Map<String, Integer> digitDict = new HashMap<>();
      static {
          digitDict.put("zero", 0);
          digitDict.put("one", 1);
          digitDict.put("two", 2);
          digitDict.put("three", 3);
          digitDict.put("four", 4);
          digitDict.put("five", 5);
          digitDict.put("six", 6);
          digitDict.put("seven", 7);
          digitDict.put("eight", 8);
          digitDict.put("nine", 9);
      }
      

      那么你的main 方法只需要参考这个Map。但是,我还建议您循环读取输入。将行转换为小写(以简化事情)。并提供终止循环的机制。类似的,

      while (scanner.hasNextLine()) {
          String line = scanner.nextLine().toLowerCase();
          if (line.equals("quit")) {
              break;
          }
          String[] tokens = line.split(";");
          StringBuilder sb = new StringBuilder();
          for (String token : tokens) {
              sb.append(digitDict.getOrDefault(token, -1));
          }
          System.out.println(sb);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-03
        • 2018-01-08
        • 2016-05-22
        • 2013-11-27
        • 2011-06-08
        • 1970-01-01
        • 2014-06-17
        相关资源
        最近更新 更多