贴上代码
import java.util.ArrayList;
import java.util.List;
/**
*
* @author gaoyannan
*
*/
public class Capitalization {
/**
* 支持10w以下转大写
* @param sb StringBuilder
* @param str 金额
*/
public static void DwDXUtil(StringBuilder sb,String str) {
String[] dws = { "万", "仟", "佰", "拾", "元", "角", "分" };
String[] dxs = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String zsStr=null;
String xsStr=null;
try {
zsStr = str.split("\\.")[0];
xsStr = str.split("\\.")[1];
if(zsStr.length()>5) {
sb.append("整数部分超出限制");
return;
}
if(xsStr.length()>2) {
sb.append("小数部分超出限制");
return;
}
} catch (Exception e) {
// TODO: handle exception
}
int dw=0;//获取数字大写文字
int num=0;//获取当前数值
for (int i = 5; i > 0; i--) {
if(zsStr.length()>=i) {
//遍历位数 从万位开始
num=Integer.parseInt(zsStr.substring(zsStr.length() - i, zsStr.length() - (i-1)));
if(num==0) {
if(i!=5) {
//上一位是零 删除 避免出现 零元
if(sb.substring(sb.length()-1, sb.length()).equals(dxs[0])) {
sb.delete(sb.length()-1, sb.length());
}
//以元结尾
if(i==1) {
sb.append(dws[dw]);
dw++;
continue;
}
//不可以零开头
if(sb.length()>1) {
//当前位 等于零 进行零补位
sb.append(dxs[num]);
}
}
}else {
sb.append(dxs[num]);
sb.append(dws[dw]);
}
}
dw++;
}
if(xsStr==null) {
return;
}
List<Integer> is=new ArrayList<Integer>();
for (int i = 0; i <xsStr.length(); i++) {
if(xsStr.length()>=i) {
num=Integer.parseInt(xsStr.substring(i, (i+1)));
if(num==0) {
//is.size()==0确保上一位不是零
if(xsStr.length()>1) {
//当前位 等于零 进行零补位
sb.append(dxs[num]);
is.add(num);
//补两次零del掉
if(is.size()>=2) {
sb.delete(sb.length()-2, sb.length());
}else {
if(i==1) {
sb.delete(sb.length()-1, sb.length());
}
}
}
}else {
sb.append(dxs[num]);
sb.append(dws[dw]);
}
}
dw++;
}
}
public static void main(String[] a) {
StringBuilder sb = new StringBuilder();
String str="100.01";
Capitalization.DwDXUtil(sb,str);
System.err.println(str+" 转换 "+sb.toString());
}
}
运行事例
100.01 转换 壹佰元零壹分
如果感觉写的不错,请动动手,点个赞吧??