Problema de conversión entre caracteres chinos y números arábigos en Java (versión eclipse)
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)} p>
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));}}