人民币大写转换 - Java实现
网上看到不少转换大小写的,代码有点点乱不方便阅读。
随手写了个,做交流学习使用。
代码如下:
import java.util.Scanner;
/**
* @Description: -- 金额转换,阿拉伯数字的金额转换成中国传统的形式
* @Package: untitled3
* @ClassName:
* @Author: showfinejiang
* @CreateDate: 2021/7/5 16:01
* @Version: 1.0
**/
public class MoneyConvert {
public static void main(String[] args) {
System.out.println(function1("1234567890.12"));
System.out.println(function1("1234567890.00"));
System.out.println(function1("1234567890"));
System.out.println(function1("1423.12"));
System.out.println(function1("0.12"));
System.out.println(function1("0.00"));
}
public static String function1(String money) {
final String regInteger = "([1-9][0-9]*)|([1-9][0-9]*\\.[0]*)";
final String regDouble = "([1-9][0-9]*\\.[0-9]*)";
final String regFloat = "([0-9]\\.[0-9]*)";
if (money == null || !money.matches(regInteger + "|" + regDouble + "|" + regFloat))
return "输入格式不正确!";
final String point = "\\.";
final String[] strPointUnit = {"分","角"};
final String[] strNum = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
final String[] strUnit = {"圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟"};
boolean isInteger = money.matches(regInteger);
//将整数部分和小数分开处理
String integerMoney = money.split(point)[0];
String floatMoney;
StringBuilder result = new StringBuilder();
//列出相应的大写加单位
for (int i = 0; i < integerMoney.length(); i++) {
result.append(strNum[Character.digit(integerMoney.charAt(i), 10)]);
result.append(strUnit[integerMoney.length() - 1 - i]);
}
//加上小数尾
if (!isInteger) {
floatMoney = money.split(point)[1];
for (int i = 0; i < floatMoney.length(); i++) {
result.append(strNum[Character.digit(floatMoney.charAt(i), 10)]);
result.append(strPointUnit[floatMoney.length() - 1 - i]);
}
}
//省略零 并返回
return dispose(result.toString());
}
private static String dispose(String result) {
result = result.replaceAll("零仟零佰零拾|零仟零佰|零佰零拾|零仟|零佰|零拾", "零");
result = result.replaceAll("零+", "零").replace("零亿", "亿");
result = result.matches("^.*亿零万[^零]仟.*$") ? result.replace("零万", "零") : result.replace("零万", "万");
result = result.replace("亿万", "亿");
//处理小数
result = result.replace("零角", "零").replace("零分", "");
result = result.replaceAll("(^[零圆]*)(.+$)", "$2");
result = result.replaceAll("(^.*)([零]+圆)(.+$)", "$1圆零$3");
//处理整数单位
result = result.replaceAll("圆零角零分|圆零角$|圆$|^零$|圆零$|零圆$", "圆整");
result = result.replaceAll("^圆整$", "零圆整");
result = result.replaceAll("零+", "零");
return result;
}
}
其中dispose部分代码摘抄自
https://blog.csdn.net/huitoukest/article/details/78217532
还有部分越界异常未做处理