Where The Streets Have No Name

숫자를 한글로 본문

Developement/Java

숫자를 한글로

highheat 2006. 3. 29. 22:48
http://www.okjsp.pe.kr/bbs?act=VIEW&seq=28683&bbs=bbs4&keyfield=subject&keyword=js&pg=11
/*
*@(#) ChoiceFormatTest1.java
*Tab size : 4
*/
//package
import java.text.ChoiceFormat;
import java.util.regex.Pattern;
/**
*123456같은 숫자를 '일십이만삼천사백오십육'처럼 나타내는 테스트클래스

*
*질문은 및 오류보고는
*jspnet.com
질의/응답 게시판으로 해주세요.
*
*@author 너부리 - 최인국
*@version
*/
public class ChoiceFormatTest1{
public void doNext(){
System.out.println( parseUnit( "98705312345123456789", "-원" ) );
System.out.println( parseUnit( "0", "-원" ) );
System.out.println( parseUnit( "1", "-원" ) );
System.out.println( parseUnit( "10", "-원" ) );
System.out.println( parseUnit( "100", "-원" ) );
System.out.println( parseUnit( "1000", "-원" ) );
System.out.println( parseUnit( "10000", "-원" ) );
System.out.println( parseUnit( "100000", "-원" ) );
System.out.println( parseUnit( "1000000", "-원" ) );
System.out.println( parseUnit( "10000000", "-원" ) );
System.out.println( parseUnit( "100000000", "-원" ) );
System.out.println( parseUnit( "1000000000", "-원" ) );
System.out.println( parseUnit( "10000000000", "-원" ) );
System.out.println( parseUnit( "100000000000", "-원" ) );
System.out.println( parseUnit( "1000000000000", "-원" ) );
System.out.println( parseUnit( "10000000000000", "-원" ) );
System.out.println( parseUnit( "100000000000000", "-원" ) );
System.out.println( parseUnit( "1000000000000000", "-원" ) );
System.out.println( parseUnit( "10000000000000000", "-원" ) );
System.out.println( parseUnit( "100000000000000000", "-원" ) );
System.out.println( parseUnit( "1000000000000000000", "-원" ) );
System.out.println( parseUnit( "10000000000000000000", "-원" ) );
System.out.println( parseUnit( "10040400300700605010", "-원" ) );

}
/**
*123456같은 숫자를 '일십이만삼천사백오십육'으로 변환 해서 반환한다.
*@author neoburi-inkuk (neoburi at neoburi.com)
*
*@param String amount 20글자 이내(천경)의 문자형 숫자
*@parsm String suffix 변환 된 문자 뒤에 붙일 단위
*@return String
*/
public String parseUnit( String amount, String suffix ){
if( isEmpty( amount )
|| amount.length() > 20 || !isNumeric( amount ) )
return "";
if( "0".equals( amount ) )
return "영" + suffix;

ChoiceFormat cfUnit =
new ChoiceFormat( "0.0#|1.0#일|2.0#이|3.0#삼|4.0#사|5.0#오"
+"|6.0#육|7.0#칠|8.0#팔|9.0#구|10.0#십" );
ChoiceFormat unit =
new ChoiceFormat( "0.0#천|1.0#백|2.0#십|3.0#경|4.0#천|5.0#백|"
+"6.0#십|7.0#조|8.0#천|9.0#백|10.0#십|"
+"11.0#억|12.0#천|13.0#백|14.0#십|15.0#만|"
+"16.0#천|17.0#백|18.0#십|19.0#" );

String parsedStr = "";
String primary = "";
String secondary = "";

int loop = amount.length();
int pos = 20 - loop;
int count = 0;
int gap = 4 - ( loop % 4 ) + 1;

for( int i = 0; i < loop; i++ ){
primary = cfUnit.format(
parseDouble( amount.substring( i, i+1 ) ) );
secondary = unit.format( (double)i+pos );
if( !isEmpty( primary ) ){
parsedStr += primary + unit.format( (double)i+pos );
count++;
if( ( i + gap ) % 4 == 0 && count > 0 )
count = 0;
}else{
if( ( i + gap ) % 4 == 0 && count > 0 ){
parsedStr += unit.format( (double)i+pos );
count = 0;
}
}
}
return parsedStr+suffix;
}

public double parseDouble( String s ){
return isEmpty( s )? 0.0 : Double.parseDouble( s );
}

public boolean isEmpty( String s ){
return s == null || "".equals( s );
}

/**
*0-9숫자만으로 이루어진 문자열인가를 검증 한다.
*@author neoburi-inkuk( neoburi at neoburi.com );
*
*@param String 검증 할 문자
*@return boolean true : 숫자, false : 숫자 이외의 문자가 포함되어 있음
*/
public boolean isNumeric( String s ){
Pattern pattern = Pattern.compile( "[^0-9]" );
return !pattern.matcher( s ).find();
}

public static void main(String[] args){
new ChoiceFormatTest1().doNext();
}
}
/*
결과 :
--------------------------------------------------------------------
D:java_and_jspjavaown_codejava.text>java ChoiceFormatTest1
구천팔백칠십경오천삼백일십이조삼천사백오십일억이천삼백사십오만육천칠백팔십구-원
영-원
일-원
일십-원
일백-원
일천-원
일만-원
일십만-원
일백만-원
일천만-원
일억-원
일십억-원
일백억-원
일천억-원
일조-원
일십조-원
일백조-원
일천조-원
일경-원
일십경-원
일백경-원
일천경-원
일천사경사백조삼천칠억육십만오천일십-원
*/