金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为壹仟零壹拾亿零壹仟零壹拾圆整,经过好几次的测试,将所有可能的出现的问题都处理干净了,数字的最大限制是万亿,当然,也可以在我的基础上进行扩充。- static char[] CharArray={'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
- static char[] UnitArray_1={' ','拾','佰','仟'};
- static char[] UnitArray_2={'亿','萬','圆'};
- static char[] arr;
- static boolean flag =false;
- static String str =null;
- static String NewChar = "零";
- static StringBuffer sb =new StringBuffer();
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- int len=0;
- BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
- String line = null;
- while((line = bufr.readLine())!=null)
- {
- arr = line.toCharArray();
- len=arr.length;
- if(len>8)
- {
- sb.delete(0,sb.length());
- str =null;
- for(int i=len-8,j=0,count=0;i<=len;)
- {
- arr = line.substring(j, i).toCharArray();
- Conver(arr.length);
- if(flag)
- sb.append((char)UnitArray_2[count]);
-
- j=i;
- i=i+4;
- count++;
- }
- sb.append('整');
- }
-
- else if(len<=8 && len>4)
- {
- sb.delete(0,sb.length());
- str =null;
- for(int i=len-4,j=0,count=1;i<=len;)
- {
- arr = line.substring(j, i).toCharArray();
- Conver(arr.length);
- sb.append((char)UnitArray_2[count]);
-
- j=i;
- i=i+4;
- count++;
- }
- sb.append('整');
- }
- else
- {
- sb.delete(0,sb.length());
- str =null;
- for(int i=len,j=0,count=2;i<=len;)
- {
- arr = line.substring(j, i).toCharArray();
- Conver(arr.length);
- sb.append((char)UnitArray_2[count]);
-
- j=i;
- i=i+4;
- count++;
- }
- sb.append('整');
- }
- Contains();
- System.out.println(str);
- }
- }
-
- //转换函数
- public static void Conver(int len)
- {
- flag= false;
- for(int i=0;i<len;i++)
- {
- int num = arr[i]-'0';
-
- if(i!=len-1)
- sb.append((char)CharArray[num]);
- else{
- if(num!=0)
- {
- sb.append((char)CharArray[num]);
- flag =true;
- }
- else
- break;
- }
- if(num!=0)
- {
- sb.append(UnitArray_1[len-i-1]);
- flag =true;
- }
-
- }
- if(!flag)
- {
- sb.delete(sb.length()-len+2, sb.length()+1);
- }
-
- }
-
- //去除多余的成分
- public static void Contains()
- {
- if(sb.charAt(sb.length()-3) =='零')
- sb=sb.replace(sb.length()-3, sb.length(), "圆整");
-
- str=sb.toString();
-
- //循环直到不再存在"零零"的情况
- while(str.contains("零零"))
- {
- if(str.contains("零零"))
- str =str.replace("零零", NewChar);
- }
- //在亿的位置上会出现问题
- int index =str.indexOf("亿")-1;
- if(index>=0)
- {
- if(str.charAt(index)=='零')
- str = str.substring(0, index)+str.substring(index+1,str.length());
-
- }
-
- //在萬的位置上会出现问题
- index =str.indexOf("萬")-1;
- if(index>0)
- {
- if(str.charAt(index)=='零')
- str = str.substring(0, index)+str.substring(index+1,str.length());
- }
-
- //在圆的位置上会出现问题
- index =str.indexOf("圆")-1;
- if(index>0)
- {
- if(str.charAt(index)=='零')
- str = str.substring(0, index)+str.substring(index+1,str.length());
- }
-
- }
-
复制代码
|
|