import org.apache.commons.lang3.StringUtils;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Pi {
private static final Map<Character, Integer> char2NumMap = new HashMap<>();
private static final Map<Character, Integer> unit2NumMap = new HashMap<>();
private static final List<Character> units = new ArrayList<>();
private static final List<Character> digits = new ArrayList<>();
static {
char2NumMap.put('零', 0);
char2NumMap.put('一', 1);
char2NumMap.put('二', 2);
char2NumMap.put('两', 2);
char2NumMap.put('三', 3);
char2NumMap.put('四', 4);
char2NumMap.put('五', 5);
char2NumMap.put('六', 6);
char2NumMap.put('七', 7);
char2NumMap.put('八', 8);
char2NumMap.put('九', 9);
unit2NumMap.put('十', 10);
unit2NumMap.put('百', 100);
unit2NumMap.put('千', 1000);
unit2NumMap.put('万', 10000);
units.addAll(unit2NumMap.keySet());
digits.addAll(unit2NumMap.keySet());
digits.addAll(char2NumMap.keySet());
}
public static String getNum(String strNum) {
if (StringUtils.isBlank(strNum) || strNum.startsWith("百") || strNum.startsWith("千") || strNum.startsWith("万")) {
return strNum;
}
try {
Deque<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < strNum.length(); i++) {
char c = strNum.charAt(i);
if (unit2NumMap.containsKey(c)) {
if (c == '万') {
int factor = 0;
while (!queue.isEmpty()) {
factor += queue.pollLast();
}
queue.offerLast(factor * 10000);
} else {
int factor = 1;
Integer lastNumInQueue = queue.pollLast();
if (i > 0 && lastNumInQueue != null) {
factor = lastNumInQueue;
}
queue.offerLast(factor * unit2NumMap.get(c));
}
} else if (char2NumMap.containsKey(c)) {
queue.offerLast(char2NumMap.get(c));
}
}
int result = 0;
while (!queue.isEmpty()) {
result += queue.pollLast();
}
return String.valueOf(result);
} catch (Exception e) {
e.printStackTrace();
return strNum;
}
}
public static String replaceNums(String keyword) {
if (StringUtils.isBlank(keyword)) {
return keyword;
}
try {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < keyword.length(); ) {
if (digits.contains(keyword.charAt(i))) {
StringBuilder numStr = new StringBuilder();
while (i < keyword.length() && digits.contains(keyword.charAt(i))) {
numStr.append(keyword.charAt(i));
i++;
}
builder.append(getNum(numStr.toString()));
} else {
builder.append(keyword.charAt(i));
i++;
}
}
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
return keyword;
}
}
public static void main(String[] args) {
System.out.println(replaceNums("你的一千万块钱"));
System.out.println(replaceNums("你的一十万块钱"));
System.out.println(replaceNums("你的一百一十块钱"));
System.out.println(replaceNums("你的四万两千五百零三块钱"));
System.out.println(replaceNums("你的十五万块钱"));
System.out.println(replaceNums("你的一十五万块钱"));
}
}
汉字数字转阿拉伯数字
最新推荐文章于 2021-05-22 20:57:04 发布