public static String ChineseToNumber(String chnStr) {
Map<String, String> chnNumChar = new HashMap<>();
chnNumChar.put("零", "0");
chnNumChar.put("壹", "1");
chnNumChar.put("贰", "2");
chnNumChar.put("叁", "3");
chnNumChar.put("肆", "4");
chnNumChar.put("伍", "5");
chnNumChar.put("陆", "6");
chnNumChar.put("柒", "7");
chnNumChar.put("捌", "8");
chnNumChar.put("玖", "9");
chnNumChar.put("角", "0.1");
chnNumChar.put("分", "0.01");
Map<String, String> chnNameValue = new HashMap<>();
chnNameValue.put("拾", "{value:10, secUnit:false}");
chnNameValue.put("佰", "{value:100, secUnit:false}");
chnNameValue.put("仟", "{value:1000, secUnit:false}");
chnNameValue.put("万", "{value:10000, secUnit:true}");
chnNameValue.put("亿", "{value:100000000, secUnit:true}");
Boolean secUnit = false;
String[] str = chnStr.split("");
Integer len = 0;
Integer jlen = 0;
Integer flen = 0;
Integer jiao = 0;
Integer fen = 0;
Integer jnum = 0;
Integer fnum = 0;
String all = "";
if (chnStr.indexOf("角") > -1 || chnStr.indexOf("分") > -1) {
double section = 0;
double rtn = 0;
double number = 0;
for (int j = 0; j < str.length; j++) {
String num = chnNumChar.get(str[j]);
if ("0.1".equals(num)) {
jlen = str.length - j;
jiao = j - 1;
}
if ("0.01".equals(num)) {
flen = str.length - j;
fen = j - 1;
}
}
//小数
for (int i = 0; i < str.length; i++) {
if (str[i] != "整") {
String num = chnNumChar.get(str[i]);
if (num != null) {
number = Double.parseDouble(num);
if (jlen == 1) {
if (i == str.length - 4) {
section += number;
}
} else if (jlen == 3) {
if (i == str.length - 6) {
section += number;
}
} else {
if (i == str.length - 5) {
section += number;
}
}
} else {
if (!"圆".equals(str[i]) && !"元".equals(str[i])) {
if (chnNameValue.get(str[i]) == null) {
return "error";
}
String cv = chnNameValue.get(str[i]);
Integer unit = JSONObject.parseObject(cv).getInteger("value");
secUnit = Boolean.parseBoolean(JSONObject.parseObject(cv).getString("secUnit"));
if (secUnit) {
section = (section + number) * unit;
rtn += section;
section = 0;
} else {
section += (number * unit);
}
} else {
jiao = i + 1;
}
number = 0;
}
}
}
if (chnStr.indexOf("分") > -1) {
fnum = Integer.valueOf(chnNumChar.get(str[fen]));
} else {
fnum = Integer.valueOf(chnNumChar.get("零"));
}
jnum = Integer.valueOf(chnNumChar.get(str[jiao]));
section = Double.valueOf((int) section + "." + jnum + "" + fnum);
all = String.valueOf(rtn + section * 1);
} else {
Integer section = 0;
Integer rtn = 0;
Integer number = 0;
//整数
for (int i = 0; i < str.length - 2; i++) {
String num = chnNumChar.get(str[i]);
if (num != null) {
number = Integer.valueOf(num);
if (i == str.length - 3) {
section += number;
}
} else {
if (chnNameValue.get(str[i]) == null) {
return "error";
}
String cv = chnNameValue.get(str[i]);
Integer unit = JSONObject.parseObject(cv).getInteger("value");
secUnit = Boolean.parseBoolean(JSONObject.parseObject(cv).getString("secUnit"));
if (secUnit) {
section = (section + number) * unit;
rtn += section;
section = 0;
} else {
section += (number * unit);
}
number = 0;
}
}
all = String.valueOf(rtn + section * 1);
}
return all;
}
java数字中文转数字
最新推荐文章于 2023-08-01 10:36:20 发布