как конвертировать число в текстовой форме в число? - PullRequest
0 голосов
/ 01 марта 2020

Что такое код, в котором, если вы введете любое число в строке текстовой формы, например, «двадцать семь», вы получите 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");

        } 
    }
}

Ответы [ 3 ]

0 голосов
/ 01 марта 2020

Вы можете разбить строку на массив с помощью функции split.
и l oop it

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);
0 голосов
/ 01 марта 2020

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) + "'");

}
0 голосов
/ 01 марта 2020

создайте карту словаря со всеми возможными, но минимальными комбинациями: например, var dics = {двадцать: 20, два: 2}

Теперь вы можете разделить входную строку по пробелу. и затем попытайтесь построить логи c, чтобы использовать эти значения.

это будет сложно реализовать наверняка, но да, это возможно.

...