您的位置:首页 > 编程语言 > Java开发

JAVA练习---人民币小写转大写

2016-03-11 11:57 417 查看
package 测试包;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 人民币数字转大写 {
public static boolean isXiaoShu(String x) {
boolean flag = false;
Pattern p = Pattern.compile("\\.");
Matcher m = p.matcher(x);
while (m.find()) {
flag = true;
}
return flag;
}

// 分解整数和小数
public static ArrayList<String> fenJieZhengshu(String x) {
ArrayList<String> ret = new ArrayList<String>();
ArrayList<String> al = new ArrayList<String>();
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(x);
while (m.find()) {
al.add(m.group());
}
int zhengshuweishu = al.get(0).length();
if (zhengshuweishu >= 0 && zhengshuweishu <= 4) {
ret.add(al.get(0));
}
if (zhengshuweishu >= 5 && zhengshuweishu <= 8) {
ret.add(al.get(0).substring(0, zhengshuweishu - 4));
ret.add(al.get(0).substring(zhengshuweishu - 4, zhengshuweishu));
}
if (zhengshuweishu >= 9 && zhengshuweishu <= 12) {
ret.add(al.get(0).substring(0, zhengshuweishu - 8));
ret.add(al.get(0).substring(zhengshuweishu - 8, zhengshuweishu - 4));
ret.add(al.get(0).substring(zhengshuweishu - 4, zhengshuweishu));
}
return ret;
}

public static String fenJieXiaoshu(String x) {
String xiaoshu = "";
ArrayList<String> al = new ArrayList<String>();
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(x);
while (m.find()) {

cbe0
al.add(m.group());
}
xiaoshu = al.get(1);
return xiaoshu;
}

// 读千,读小数
public static String readQian(String x) {
String ret = "";
String daxie = "零一二三四五六七八九十";
String danwei = "个十百千万亿";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < x.length(); i++) {
sb.append(daxie.charAt(Integer.parseInt(x.charAt(i) + "")));
sb.append(danwei.charAt(x.length() - i - 1));
}
ret = sb.toString();
return ret;
}

public static String readxiaoshu(String x) {
String ret = "";
String daxie = "零一二三四五六七八九十";
ret = daxie.charAt(Integer.parseInt(x.charAt(0) + "")) + "角";
ret = ret + daxie.charAt(Integer.parseInt(x.charAt(1) + "")) + "分";
return ret;
}

// 统一读法
public static String readMoney(String x) {
String ret = "";

StringBuilder sb_temp = new StringBuilder();
ArrayList<String> zheng = fenJieZhengshu(x);
if (zheng.size() == 1) {
sb_temp.append(readQian(zheng.get(0)));
}
if (zheng.size() == 2) {
sb_temp.append(readQian(zheng.get(0)));
sb_temp.append("万");
sb_temp.append(readQian(zheng.get(1)));
}
if (zheng.size() == 3) {
sb_temp.append(readQian(zheng.get(0)));
sb_temp.append("亿");
sb_temp.append(readQian(zheng.get(1)));
sb_temp.append("万");
sb_temp.append(readQian(zheng.get(2)));
}

String xiao = "";
if (isXiaoShu(x) == true) {
xiao = readxiaoshu(fenJieXiaoshu(x));
sb_temp.append("圆");
sb_temp.append(xiao);
ret = "人民币" + sb_temp.toString();
}
if (isXiaoShu(x) == false) {
ret = "人民币" + sb_temp.toString() + "圆整";
}

ret = xiuGai(ret);

return ret;
}

// 修改
public static String xiuGai(String x) {
String ret = x;
for (int i = 0; i < 2; i++) {
ret = ret.replaceAll("零角零分", "整");
ret = ret.replaceAll("零角", "零");
ret = ret.replaceAll("零分", "");
ret = ret.replaceAll("零千零百零十零个亿", "");
ret = ret.replaceAll("零千零百零十零个万", "零");
ret = ret.replaceAll("零千零百零十零个", "");
ret = ret.replaceAll("零百零十零个", "");
ret = ret.replaceAll("零十零个", "");
ret = ret.replaceAll("零个圆", "");
ret = ret.replaceAll("零个", "");
ret = ret.replaceAll("零千零百零十", "零");
ret = ret.replaceAll("零千零百", "零");
ret = ret.replaceAll("零万", "万");
ret = ret.replaceAll("零千", "零");
ret = ret.replaceAll("零百", "零");
ret = ret.replaceAll("零十", "零");
ret = ret.replaceAll("零零", "零");
ret = ret.replaceAll("个", "");
ret = ret.replaceAll("人民币零", "人民币");
ret = ret.replaceAll("人民币亿", "人民币");
ret = ret.replaceAll("", "");
}
return ret;
}

public static void main(String[] args) {
System.out.println(readMoney("0.78"));
System.out.println(readMoney("10000.00"));
System.out.println(readMoney("100110000089.00"));
System.out.println(readMoney("100110000089.00"));
System.out.println(readMoney("000000089.00"));
System.out.println(readMoney("100110000089.00"));
System.out.println(readMoney("1000000009.10"));
}
}


人民币七角八分

人民币一万圆整

人民币一千零一亿一千万零八十九圆整

人民币一千零一亿一千万零八十九圆整

人民币八十九圆整

人民币一千零一亿一千万零八十九圆整

人民币一十亿零九圆一角
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: