金额转换,阿拉伯数字转换成中国传统形式。

    xiaoxiao2021-03-25  100

    package com.qidai; import java.util.Scanner; public class Test10 { /** * 金额转换,阿拉伯数字转换成中国传统形式。 * 例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整     */ public static void main(String[] args) { System.out.println("请输入要转换的数值"); Scanner sc = new Scanner(System.in); String str = transform(sc.next()); //调用函数,将阿拉伯数字金额 转换为中国传统形式金额 System.out.println(" 转化后为: "+str); //打印转换后的字符串内容 } /** *  将字符串金额str转换为中国传统金额表示方式 * @param str * @return */ public static String transform(String str){ //使用正则表达式判断字符串格式是否为数字格式 if(!str.matches("\\d+")){ System.out.println("字符串" + str + "不是数字格式,无法转换!"); return null; } //将字符串最前面的0去掉 while(str.startsWith("0")){ str = str.substring(1, str.length()); } //将字符串数字替换成中文数字 String[] num = new String[]{"0","1","2","3","4","5","6","7","8","9"}; String[] cnNum = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; for(int i=0; i<10; i++){ str = str.replace(num[i], cnNum[i]); } StringBuilder sb = new StringBuilder(str);//StringBuilder容器中存放字符串,用于插入删除操作 int index = str.length()-1;   //从第index个字符从后往前开始操作,操作一次,index-- //存放金额单位 String[] unit = {"","拾","佰","仟"}; String[] unit4 = {"萬","亿"}; boolean flag = false;//判断前一个数是否为零的标记 for(int i=0; i<str.length(); i++){//循环体内对容器sb进行操作 //每4位插入万每8位插入亿,最低位先不设置单位 if(i%4 == 0 && i != 0){ //根据金额规则,单位万前面为4个零时,不插入万,并将index位置(最低位)的零删除 if((i/4-1)%2 == 0 && index >= 3 && str.substring(index-3, index+1).equals("零零零零")){ sb.deleteCharAt(index); index--; continue; } //否则在index+1位置插入相应的单位:万、亿 sb.insert(index+1, unit4[(i/4-1)%2]); } //如果4位的最低位为零,删除最低位的零,将零标志置为true if(i%4 == 0 && str.charAt(index) == '零'){ sb.deleteCharAt(index); flag = true; index--; continue; } //如果前一位为零并且这一位也为零,删除这一位的零 if(flag && str.charAt(index) == '零'){ sb.deleteCharAt(index); index--; continue; } //如果当前位为零,将零标志置为true if(str.charAt(index) == '零'){ flag = true; index--; continue; } //当前位不为零,将零标志位置为false,插入金额单位 flag = false; sb.insert(index+1, unit[i%4]); index--; } //完善金额表示形式 sb.append("圆整"); return sb.toString(); } }
    转载请注明原文地址: https://ju.6miu.com/read-17411.html

    最新回复(0)