Red de conocimiento informático - Aprendizaje de programación - Problema de conversión entre caracteres chinos y números arábigos en Java (versión eclipse)

Problema de conversión entre caracteres chinos y números arábigos en Java (versión eclipse)

paquete test.format importar texto de Java. formato de número; importar Java util. clase pública SimpleMoneyFormat {

cadena final estática pública UNO =. " UNO "; Cadena final estática pública DOS = " DOS "; Cadena final estática pública TRES = " TRES "; Cadena final estática pública CUATRO = " Si "; " tierra "; cadena final estática pública SIETE = " Qi "; cadena final estática pública OCHO = " OCHO "; cadena final estática pública NUEVE = " nueve cadena final estática pública DIEZ = " recoger "; cadena final estática pública olvidada = " Bailey "; cadena final estática pública 千 = "千"; cadena final estática pública diez _ pasado = "万"; cadena final estática pública finalizada _ millón = "Miles de millones"; cadena final estática pública yuan = "元"; final estática pública cadena yuan = "元" final Cadena JIAO = " ángulo "; cadena final estática pública FEN = " puntos "; cadena final estática pública DOT = ","; formateador de formato simplemoney privado = nulo; ); patrón de dinero chino HashMap = nuevo HashMap(); formato de número privado = formato de número. getinstance(); formato de número de fracción mínima (2); setgroupingused(false); chinoNumberMap .put("0 ", cero); chinoNumberMap.put("1 ", uno); chinoNumberMap.put("2 ", dos); .put("4 ", cuatro); chinoNumberMap.put("5 ", cinco); chinoNumberMap.put("6 "; chinoNumberMap.put("7 ", siete); , ocho);

hineseNumberMap.put("9", nueve); chinoNumberMap.put(punto, punto); patrón de dinero chino. put("1", diez); " , mil); chinoMoneyPattern.put("4 ", diez mil_mil); chinoMoneyPattern.put("5 ", diez); chinoMoneyPattern.put("6 ", cien); chinoMoneyPattern.put("7 ", uno mil); ChineseMoneyPattern.put("8 ",bain_MILLION);}

formato de dinero simple estático público getInstance(){ if(formateador == null)formateador = nuevo formato de dinero simple(); /p>

Formato de cadena pública (cadena de dinero) { verificar precisión (resultado de cadena de dinero); resultado = convertToChineseNumber(cadena de dinero); agregarunidades de cadena de dinero (resultado de devolución); double moneyDouble) {formato de retorno (formato de número . formato (dinero doble) } formato de cadena pública (int moneyInt) {formato de retorno (formato de número . formato (dinero int)

}Formato de cadena pública) (long moneyLong) {formato de retorno (formato de número. formato(dinero largo));}

Formato de cadena pública (Número moneyNum) {formato de retorno (formato de número. formato(dinero num)}

cadena privada convertToChineseNumber(String money str){ Resultado de cadena buffer de cadena cMoneyStringBuffer = nuevo buffer de cadena(); for(int I = 0; i& ltmoney str . length(); i++ ){ cmoneystringbuffer . . get(money str . substring(I, I+1)));}

// Algunos cientos de miles de millones y así sucesivamente son las unidades que se pueden encontrar en caracteres chinos, agregue su índice int. punto = cmoneystringbuffer.

índice de (punto); int cursor de patrón de dinero = 1; for (int I = indexOfDot-1; i>0;I-){ cmoneystringbuffer . insert(I, Chinesemoneypattern. get(EMPTY+cursor de patrón de dinero)); cursor de patrón de dinero = = 8?1:cursor de patrón de dinero+1;} Parte de fracción de cadena = cmoneystringbuffer . . length());Mientras (cmoneystringbuffer.indexof("zero")!= -1) {

Cmoneystringbuffer. reemplazar(cMoneyStringBuffer . índice de(" cero "), cmoneystringbuffer.("cero")+2 índice, cero);

} while (cmoneystringbuffer.indexof("cero cien")!= -1 ) {

Cmoneystringbuffer. reemplazar(cMoneyStringBuffer . índice de ("cero cien"), cmoneystringbuffer.("cero cien")+2 índice, cero);

} while (cmoneystringbuffer.indexof("cero mil")!= - 1) {

Cmoneystringbuffer. reemplazar(cMoneyStringBuffer . índice de ("cero mil"), cmoneystringbuffer. El índice es ("cero mil") + 2, cero

} while (cmoneystringbuffer. indexof("万")! = - 1) {

Cmoneystringbuffer. reemplazar(cMoneyStringBuffer . índice de ("diez mil"), cmoneystringbuffer. índice de ("diez mil") + 2, diez _ pregunta

} while (cmoneystringbuffer. indexof ("cero mil millones")); ! = -1) {

Cmoneystringbuffer. reemplazar(cMoneyStringBuffer . índice de (" cero mil millones "), cmoneystringbuffer. ("cero mil millones") + 2, índice de mil millones } while (cmoneystringbuffer. indexof ("cero cero ")! = -1) {

Cmoneystringbuffer. reemplazar(cMoneyStringBuffer . índice de(" cero cero "), cmoneystringbuffer.

(índice de "cero cero") + 2, cero);

} if(cmoneystringbuffer . lastindexof(ZERO)= = cmoneystringbuffer . length()-1)cmoneystringbuffer eliminar(cmoneystringbuffer . length()- 1. cmoneystringbuffer. length()); cmoneystringbuffer. append(parte de fracción);

resultado = cmoneystringbuffer; resultado de retorno; buffer cMoneyStringBuffer = nuevo buffer de cadena(dinero str); índice int de DOT = cmoneystringbuffer index of(DOT); cmoneystringbuffer. length()- 1; , JIAO); cmoneystringbuffer . insert(cmoneystringbuffer . length(), FEN); If (cMoneyStringBuffer.indexOf("ángulo de cero grados punto cero")! = -1) // Sin fracción, redondeado.

Cmoneystringbuffer. Reemplazar (cmoneystringbuffer. index of ("ángulo de cero grados, punto cero"), cMoneyStringBuffer.length(), "integer"); Elseif (cmoneystringbuffer. indexof ("zero")! = -1) // Si no hay punto cero , agregue cmoneystringbuffer. Reemplazar (cmoneystringbuffer.index of("punto cero"),cMoneyStringBuffer.length(),"integer");

Else {if (cmoneystringbuffer.indexof("ángulo de cero grados")!=-1)

p>

cmoneystringbuffer . delete(cMoneyStringBuffer.indexOf("ángulo de cero grados"), cmoneystringbuffer . index of("ángulo de cero grados")+2);

tmp buffer append. (" entero "); } resultado = cmoneystringbuffer . tostring(); devuelve resultado; } precisión de verificación nula privada (cadena de dinero){

int fracción dígitos = longitud de dinero()-cadena de dinero. índice de (DOT) - 1; si (dígitos de fracción & gt; 2) lanza una nueva excepción de tiempo de ejecución ("cantidad" + cadena de dinero + "tiene más de dos decimales."); // La precisión no puede ser menor} public static void main(string args[] ){ system.

out.println (getinstance(). formato(nuevo doble(1001001.065438));}}