Java 获取字符串中的float 或 int (包含中文和阿拉伯混编)

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;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值