如何将文本表单中的数字转换为数字



如果在文本行中输入任何数字(例如"二十七"(,则输出为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");
} 
}
}

使用所有可能但最小的组合创建字典映射:例如var dics={二十:20,二: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);

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

最新更新