중화사전망 - 자전 검색 - 자바의 중국어 글자 수와 아라비아 숫자의 변환 문제 (eclipse 버전)

자바의 중국어 글자 수와 아라비아 숫자의 변환 문제 (eclipse 버전)

패키지 test.format 가져오기 java.text.numberformat; Java.util.hashmap 을 가져옵니다. 공용 클래스 SimpleMoneyFormat {

공용 정적 최종 문자열 empty = ""; 공용 정적 최종 문자열 zero = "zero"; 공용 정적 최종 문자열 one = "one"; 공용 정적 최종 문자열 two = "two"; Public static final string three = "three"; 공용 정적 최종 문자열 four = "si"; 공용 정적 최종 문자열 five = "Wu"; 공용 정적 최종 문자열 six = "land"; 공용 정적 최종 문자열 seven = "qi"; Public static final String EIGHT = "8"; 공용 정적 최종 문자열 nine = "nine"; Public static 최종 문자열 ten = "pickup"; Public static final string forgotten = "bain"; Public static final string 천 = "천"; Public static final string ten _ past = "만"; Public static final 문자열 ended _ million = "억"; Public static 최종 문자열 yuan = "yuan"; Public static final string jiao = "angle"; 공용 정적 최종 문자열 fen = "points"; 공용 정적 최종 문자열 DOT = ". \ "; 전용 정적 SimpleMoneyFormat 포맷터 = null private hashmap chinesenumbermap = new hashmap (); Private hashmap Chinese money pattern = new hashmap (); Private NumberFormat 숫자 형식 = 숫자 형식입니다. Getinstance (); Privatesimplemoneyformat () {numberformat.setmaximumfractiondigits (4); Numberformat.setminimumfractiondigits (2); Numberformat.setgroupingused (false); Chinesenumbermap.put ("0", 0); Chinesenumbermap.put ("1",one); Chinesenumbermap.put ("2", two); Chinesenumbermap.put ("3", three); Chinesenumbermap.put ("4", four); Chinesenumbermap.put ("5", five); Chinesenumbermap.put ("6", six); Chinesenumbermap.put ("7", seven); Chinesenumbermap.put ("8", 8); Chinesenumbermap.put ("9", 9); ChineseNumberMap.put (점, 점); Chinese money pattern.put ("1",ten); Chinese money pattern. ("2", 100); Chinese money pattern. ("3", 천); Chinese money pattern.put ("4", ten _ found); Chinese money pattern ("5", ten); Chinese money pattern. ("6", 100); Chinese money pattern. ("7", 천); Chinese money pattern.put ("8", bail _ million); }

Public static simple money format getinstance () {if (formatter = = null) formatter = new simple money format ()) 포맷터를 반환합니다. }

공용 문자열 형식 (stringmoney str) {check precision (money str); 문자열 결과 Result = converttochinesenumber (money str); Result = addunitstochinesemoney string (result); 결과를 반환합니다. } 공용 문자열 형식 (double money double){ 반환 형식 (numberformat.format (money double)); } 공용 문자열 형식 (int money int){ 반환 형식 (numberformat.format (moneyint));

} 공통 문자열 형식 (long money long){ 반환 형식 (numberformat.format (money long)); }

공용 문자열 형식 (Number money num){ 반환 형식 (numberformat.format (moneynum)); }

전용 문자열 converttochinesenumber (string money str) {string result; Stringbuffer cmoneystringbuffer = new stringbuffer (); For(int I = 0;; 나 & ltmoney str.length (); I++) {cmoneystringbuffer.append (chinesenumbermap.get (moneystr.substring (I, I+/kloc-0) }

//수조 등은 모두 한자의 단위이며, 그들의 int 인덱스 dot = cmoneystringbuffer 를 더한 것이다. (점) 의 색인 Int money pattern cursor =1; For (int I = index of dot-1; 나>0; I-) {cmoneystringbuffer.insert (I, chinesemoneypattern.get (empty+money pattern cursor)); Moneypatterncursor = moneypatterncursor = = 8? 1:money pattern cursor+1; } stringfractionpart = cmoneystringbuffer.substring (cmoneystringbuffer.indexof ("). )); Cmoneystringbuffer.delete (cmoneystringbuffer.indexof (". "), cmoneystringbuffer.length (); While(cmoneystringbuffer). Indexof ("0")! =-1) {

Cmoneystringbuffer 입니다. Replace (cmoneystringbuffer.indexof ("zero"), cmoneystringbuffer. 색인 ("0")+2,0);

} while(cmoneystringbuffer. 인덱스 of ("제로 백")! =-1) {

Cmoneystringbuffer 입니다. Replace (cmoneystringbuffer.indexof ("000"), cmoneystringbuffer. 지수 ("제로 백")+2,0);

} while(cmoneystringbuffer. 인덱스 of ("0 천")! =-1) {

Cmoneystringbuffer 입니다. Replace (cmoneystringbuffer.indexof ("0 천"), cmoneystringbuffer. 지수 ("0 천")+2,0);

} while(cmoneystringbuffer. 인덱스 of ("만")! =-1) {

Cmoneystringbuffer 입니다. Replace (cmoneystringbuffer.indexof ("만"), cmoneystringbuffer. 인덱스 of ("만"+2,ten _ question);

} while(cmoneystringbuffer. 인덱스 of ("0 억")! =-1) {

Cmoneystringbuffer 입니다. Replace (cmoneystringbuffer.indexof ("0 억"), cmoneystringbuffer. 지수 ("0 억") +2 억; } while(cmoneystringbuffer. Indexof ("0 0 0")! =-1) {

Cmoneystringbuffer 입니다. Replace (cmoneystringbuffer.indexof ("zerozero"), cmoneystringbuffer. 색인 ("0 0")+2,0);

} if (cmoneystringbuffer.lastindexof (제로) = = cmoneystringbuffer.length ()-1) com Cmoneystringbuffer.append (fractionpart);

Result = cmoneystringbuffer.tostring (); 결과를 반환합니다. } 개인 문자열 addunitstochinesemoney string (string money str) {string result; String buffer cmoneystringbuffer = new string buffer (money str); Intindex of dot = cmoneystringbuffer.index of (dot); Cmoneystringbuffer.replace (index of dot, indexOfDot+1, yuan); Cmoneystringbuffer.insert (cmoneystringbuffer.length ()-1,jiao); Cmoneystringbuffer.insert (cmoneystringbuffer.length (), fen); If(cmoneystringbuffer. index of ("0 도 제로")! =- 1)// 점수 없음, 반올림.

Cmoneystringbuffer 입니다. 대체 (cmoneystringbuffer). Index of ("0 도 및 0 점"), cMoneyStringBuffer.length (), "전체"); Else if(cmoneystringbuffer). Indexof ("0")! =- 1)// 0 이 없으면 cmoneystringbuffer 를 추가합니다. 대체 (cmoneystringbuffer). Index of ("제로"), cMoneyStringBuffer.length (), "정수");

Else {if(cmoneystringbuffer). Indexof ("0 도")! =- 1)

Cmoneystringbuffer.delete (cmoneystringbuffer. index of ("영도 각도"), cmoneystringbuffer.indexof ("영도 각도")

Tmpbuffer.append ("whole"); } result = cmoneystringbuffer.tostring (); 결과를 반환합니다. } 개인 void check precision (string money str) {

Intfractiondigits = money str.length ()-money str.index of (dot)-1; If(fraction digits & gt;; 2) throw new runtimeexception ("amount"+money str+"의 소수점 자릿수가 두 자리 이상입니다. ); //정밀도는 더 이상 낮출 수 없습니다} public static voidmain (stringargs []) {system. Out. println(getinstance (). 형식 (새 배정밀도 (1001001.065438)); }}