Regex - Transformar números em extenso em digitos

Olá pessoal tudo bem?

Eu estou tentando transformar números em extenso em dígitos, por exemplo:

O número extenso “vinte um” queria criar um regex assim

public static String[] unidades = { "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez", "onze", "doze","treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito","dezenove"};

public static String[] dezenas = { "", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa" };

//Quero usar os arrays acima criar um padrão, Ex :

meu_padrao p = dezenas+" "+centenas;

//Que transforme “vinte um” em “21”

Alguém conhece uma forma inteligente de fazer isso usando regex ou outra coisa?

Tem varias formas de fazer isso. Uma forma simples, crie um HashMap<String, Integer> e adicione todos as unidades e dezenas representados com o inteiro, separe a entrada usando o split(" ") e para cada parte, obtenha o valor no Map, depois só somar.

HashMap<String, Integer> numeros;
numeros.add("um", 1);
/* ... */
numeros.add("vinte", 20);
/* ... */

String entrada;
String[] partes = entrada.split(" ");
int resultado = numeros.get(partes[0]) + numeros.get(partes[1]);
1 curtida