【问题标题】:how do you convert a number in a text form to a number?如何将文本形式的数字转换为数字?
【发布时间】:2020-03-01 06:58:16
【问题描述】:

如果在文本行中输入任何数字,例如“二十七”,输出为 27 的代码是什么?

但是使用此代码需要时间才能达到数百万,这就是为什么我想知道可以做些什么来提高效率

import java.util.Scanner;
public class conversion {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

            System.out.println("Enter A Number In Text Form: ");
            String inp = input.nextLine();

        if (inp.equals("zero")) { 
            System.out.println("0");
        } else if (inp.equals("one")) {
            System.out.println("1");
        } else if (inp.equals("two")) {
            System.out.println("2"); 
        } else if (inp.equals("three")) {
            System.out.println("3");
        } else if (inp.equals("four")) {
            System.out.println("4");
        } else if (inp.equals("five")) {
            System.out.println("5");
        } else if (inp.equals("six")) {
            System.out.println("6");
        } else if (inp.equals("seven")) {
            System.out.println("7");
        } else if (inp.equals("eight")) {
            System.out.println("8");
        } else if (inp.equals("nine")) {
            System.out.println("9");

        } 
    }
}

【问题讨论】:

  • 我已经添加了我的代码
  • 这不是 JavaScript 代码。我建议删除 JavaScript 标签 ???? Java 之于 JavaScript,就像钢笔之于企鹅。
  • 这个问题需要努力。您必须分别定义 1 到 19,然后分别定义 20 到 ...。参考这个geeksforgeeks.org/convert-number-to-words

标签: java string integer


【解决方案1】:

创建一个包含所有可能但最小组合的字典映射: 例如 var dics= { 二十:20 , 二: 2}

现在您可以按空格分割输入字符串。然后尝试构建一个逻辑来利用这些值。

这肯定会很复杂,但是是的,这是可能的。

【讨论】:

    【解决方案2】:

    您可以使用split 函数将字符串拆分为数组。
    并循环它

    String[] inps = inp.split(" ");
    int remaining = inps.length;
    String outstr = "";
    for (String numstr : inps) 
    {
       remaining--;
       int digit = 0;
       switch (numstr.toLowerCase()) // in the JDK7, You can use Strings in switch 
       {
       case "twenty": outstr += '2'; digit=10; break;
       case "thirty": outstr += '3'; digit=10; break;
       // ...
       }
       if (digit == 10 && remaining == 0)
       {
          // tenth digit, but no remaining
          outstr += '0';
       }
    }
    System.out.println(outstr);
    

    【讨论】:

      【解决方案3】:

      public static final String[] tens = { 
      		"", 		// 0
      		"",		// 1
      		"Twenty", 	// 2
      		"Thirty", 	// 3
      		"Forty", 	// 4
      		"Fifty", 	// 5
      		"Sixty", 	// 6
      		"Seventy",	// 7
      		"Eighty", 	// 8
      		"Ninety" 	// 9
      };
      
      public static String convert(final int n) {
      	if (n < 0) {
      		return "Minus " + convert(-n);
      	}
      
      	if (n < 20) {
      		return units[n];
      	}
      
      	if (n < 100) {
      		return tens[n / 10] + ((n % 10 != 0) ? " " : "") + units[n % 10];
      	}
      
      	if (n < 1000) {
      		return units[n / 100] + " Hundred" + ((n % 100 != 0) ? " " : "") + convert(n % 100);
      	}
      
      	if (n < 100000) {
      		return convert(n / 1000) + " Thousand" + ((n % 10000 != 0) ? " " : "") + convert(n % 1000);
      	}
      
      	if (n < 10000000) {
      		return convert(n / 100000) + " Lakh" + ((n % 100000 != 0) ? " " : "") + convert(n % 100000);
      	}
      
      	return convert(n / 10000000) + " Crore" + ((n % 10000000 != 0) ? " " : "") + convert(n % 10000000);
      }
      
      public static void main(final String[] args) {
      
      	int n;
      	Scanner s=new Scanner(System.in);
          System.out.println("Enter a number to convert into word format");
      	n =s.nextInt();
      	System.out.println(NumberFormat.getInstance().format(n) + "='" + convert(n) + "'");
      
      }

      【讨论】:

      • 我在eclipse中复制粘贴了,但是有错误如何解决?
      猜你喜欢
      • 2019-10-21
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多