static HashMap<String,Integer> staticMap = new HashMap<>();
private static HashMap<String,Integer> getMap(){
if (staticMap.size() == 0) {
HashMap<String,Integer> map = new HashMap<>();
map.put("点", 1);
map.put("零", 2);
map.put("一", 3);
map.put("二", 4);
map.put("三", 5);
map.put("四", 6);
map.put("五", 7);
map.put("六", 8);
map.put("七", 9);
map.put("八", 10);
map.put("九", 11);
map.put("十", 12);
map.put("百", 102);
map.put("千", 1002);
map.put("万", 10002);
map.put("亿", 100000002);
map.put(".", -1);
map.put("0", -2);
map.put("1", -3);
map.put("2", -4);
map.put("3", -5);
map.put("4", -6);
map.put("5", -7);
map.put("6", -8);
map.put("7", -9);
map.put("8", -10);
map.put("9", -11);
staticMap = map;
}
return staticMap;
}
//获取字符串符合规范的词 如:"我是十九点5" 过滤为:"十九点5"
public static String getNumber(String numberString){
if (numberString == null){
return null;
}
HashMap<String,Integer> map = getMap();
String thisCHNumber = null;
for (int i = 0;i < numberString.length();i++){
String thisStr = numberString.substring(i,i+1);
if(map.get(thisStr) != null){
if (thisCHNumber != null){
thisCHNumber += thisStr;
}else {
thisCHNumber = thisStr;
}
}
}
return thisCHNumber;
}
//讲混编字符转换为float 如格式:十九点5 19点5 19点5 十九点五
public static float getFloatChStr(String numberStr){
if (numberStr == null){
return 0;
}
numberStr = numberStr.replace(".","点");
String[] strings = numberStr.split("点");
String intString = numberStr;
String pointString = null;
if (strings !=null && strings.length > 0){
intString = strings[0];
if (strings.length > 1){
if (strings[1].length() > 0){
pointString = strings[1];
}
}
}
HashMap<String,Integer> map = getMap();
int intFlaot = 0;
int intUnitl = 1;
int intMoreUnitl = 1;
for (int i = intString.length() -1 ;i >= 0 ;i--){ //从低位算起比较容易,低位算起,能够优先获取到单位量
String thisStr = intString.substring(i,i+1);
int ss = map.get(thisStr);
if (ss > 0){
int unit = ss-2;
if (unit > 9){
if (unit < intMoreUnitl) {
intUnitl = unit * intMoreUnitl; // 如解析"二百万三千" intMoreUnitl 就是最大单位 "万"
}else {
intMoreUnitl = unit; //获取最大的单位
intUnitl = unit;
}
if (i == 0){
intFlaot += intUnitl;
}
}else {
intFlaot += intUnitl *unit;
}
}else {
intFlaot = Integer.valueOf(intString);
break;
}
}
float pointFloat = 0;
float pointUnitl = (float)0.1;
if (pointString != null) {
for (int i = 0; i < pointString.length() ; i++) {
String thisStr = pointString.substring(i, i + 1);
int unit = (map.get(thisStr) - 2);
if (unit >= 0) {
pointFloat += unit * pointUnitl;
pointUnitl *= 0.1;
}else {
pointFloat = Float.valueOf("0."+pointString);
break;
}
}
}
Log.i("Num2CHS",intFlaot + "|"+intUnitl + "+" + pointFloat);
return intFlaot+pointFloat;
}