/**
* 根据金额后的单位获取金额,且目前金额只能为阿拉伯数字!
*/
public static String sumMoneyByString(String info){
String[] unitArr = {"元","万元","亿元"}; //金额单位
List<String> list = new ArrayList<>(); //整数及浮点数集合
String regex = "\\d*[.]\\d*|\\d*[1-9]\\d*";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(info);
while (m.find()) {
if (!"".equals(m.group())){
list.add(m.group());
}
}
//遍历集合,扫描罚款信息,看数字后面是否是金额单位,如果是则该数为罚款金额
int start = 0; //开始扫描的索引
List<String> yuanList = new ArrayList<>(); //罚款金额集合(元)
List<String> wanList = new ArrayList<>(); //罚款金额集合(万元)
List<String> yiList = new ArrayList<>(); //罚款金额集合(亿元)
if(list.size() > 0){
for (String number : list) {
int first = info.indexOf(number, start); //金额首位字符在罚款信息中的索引
start = first + number.length();
//获取 开始扫描的索引 之后的一个或两个字符,判断是否是金额单位,如果是则该数为罚款金额
if(info.length() >= start+1){
String one = info.substring(start, start+1);
if(unitArr[0].equals(one) && start!= 0){
yuanList.add(number);
}
}
if(info.length() >= start+2){
String two = info.substring(start, start+2);
if(unitArr[1].equals(two) && start!= 0){
wanList.add(number);
}
if(unitArr[2].equals(two) && start!= 0){
yiList.add(number);
}
}
}
}
Double yuanSum = 0d;
Double wanSum = 0d;
Double yiSum = 0d;
if(yuanList.size() > 0){
for (String yuan : yuanList) {
//精确的加法
yuanSum = Arith.add(yuanSum, Double.valueOf(yuan));
}
}
if(wanList.size() > 0){
for (String wan : wanList) {
//精确的加法及乘法
wanSum = Arith.add(wanSum, Arith.mul(Double.valueOf(wan),10000d));
}
}
if(yiList.size() > 0){
for (String yi : yiList) {
//精确的加法及乘法
yiSum = Arith.add(yiSum, Arith.mul(Double.valueOf(yi),100000000d));
}
}
//求和
Double moneySum = Arith.addAll(yuanSum, wanSum, yiSum);
DecimalFormat df = new DecimalFormat("0.00");
String sumFormat = df.format(moneySum);
return sumFormat.equals("0.00") ? "" : sumFormat;
}