有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将字符串数字字转换为字符串数字:Java

我是一名初级程序员,正在尝试使用单词转换器,它应该是这样工作的:Input=“零;六;八;二”Output=“0682”。但在我的例子中,我得到的输出是“0282”。有什么解决办法吗?或者我应该换个程序?。我发现LinkedList或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;
    
            }

共 (2) 个答案

  1. # 1 楼答案

    在这里,我更喜欢使用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);
    }
    
  2. # 2 楼答案

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

    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