将Android String中的大写汉字数字转换为int或long型数字

转换截取String中的数字并不是一件什么难的事情,相信各位都是会的,但转换汉字数字还是有一定的难度的,下面就是为各位带来一种解决方法,仅供各位参考:

public static long getNumFromString(Context context, String remark) {
       long index = NumberUtils.getNumbers(context, remark);
       return index;
   }	
实际调用的是下面这个方法:

public static long getNumbers(Context context,String value) {
        String num_0 = context.getResources().getString(R.string.num_0);
        value = value.replace(num_0, "");
        ChineseNumber1x chineseNumber1x = new ChineseNumber1x(context,value);
        ChineseNumber10000 chineseNumber10000 = new ChineseNumber10000(context,value = value.replace(chineseNumber1x.getData(), ""));
        ChineseNumber1000 chineseNumber1000 = new ChineseNumber1000(context,value = value.replace(chineseNumber10000.getData(), ""));
        ChineseNumber100 chineseNumber100 = new ChineseNumber100(context,value = value.replace(chineseNumber1000.getData(), ""));
        ChineseNumber10 chineseNumber10 = new ChineseNumber10(context,value = value.replace(chineseNumber100.getData(), ""));
        ChineseNumber1 chineseNumber1 = new ChineseNumber1(context,value.replace(chineseNumber10.getData(), ""));

        long number1x = chineseNumber1x.getNumber();
        long number10000 = chineseNumber10000.getNumber();
        long number1000 = chineseNumber1000.getNumber();
        long number100 = chineseNumber100.getNumber();
        long number10 = chineseNumber10.getNumber();
        long number1 = chineseNumber1.getNumber();
        long total = number1 + number10 + number100 + number1000 + number10000 + number1x;
        return total;
    }
进行验证测试,毕竟用事实说话嘛,输入:

  	Log.d(TAG, "getFilePosition()  = " + AiManagerUtils.getNumFromString(this, "打开第12个"));
        Log.d(TAG, "getFilePosition()  = " + AiManagerUtils.getStringNum("打开第12个"));
        Log.d(TAG, "getFilePosition()  = " + AiManagerUtils.getNumFromString(this, "打开第一百个"));
        Log.d(TAG, "getFilePosition()  = " + AiManagerUtils.getNumFromString(this, "打开第一千个"));
        Log.d(TAG, "getFilePosition()  = " + AiManagerUtils.getNumFromString(this, "打开第一万个"));
打印的log:
	14:13:47.104 13054-13054/com.android.video D/: getFilePosition()  = 0
	14:13:47.104 13054-13054/com.android.video D/: getFilePosition()  = 12
	14:13:47.111 13054-13054/com.android.video D/: getFilePosition()  = 100
	14:13:47.117 13054-13054/com.android.video D/: getFilePosition()  = 1000
	14:13:47.123 13054-13054/com.android.video D/: getFilePosition()  = 10000

眼尖的同学立马就看出了问题,第一行的输入"打开第12个",输出却是0,说你这不是坑我们吗,别急,请听我慢慢道来,完整代码如下:

public static long getNumFromString(Context context, String remark) {
        long index;
        if (isContainsNumber(remark)) {
            index = Long.valueOf(getStringNum(remark));
        } else {
            index = NumberUtils.getNumbers(context, remark);
        }
        return index;
    }
	
public static boolean isContainsNumber(String time) {
        boolean isNum = false;
        String regEx = "[^0-9]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(time);
        String trim = m.replaceAll("").trim();
        if (trim.length() > 0) {
            isNum = true;
        } else {
            isNum = false;
        }
        return isNum;
    }

public static String getStringNum(String time) {
        String regEx = "[^0-9]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(time);
        String trim = m.replaceAll("").trim();
        if (trim.length() == 1) {
            trim = "0" + trim;
        }
        return trim;
    }
	14:39:36.347 17130-17130/com.android.video D/: getFilePosition()  = 12
	14:39:36.348 17130-17130/com.android.video D/: getFilePosition()  = 12
	14:39:36.365 17130-17130/com.android.video D/: getFilePosition()  = 100
	14:39:36.375 17130-17130/com.android.video D/: getFilePosition()  = 1000
	14:39:36.388 17130-17130/com.android.video D/: getFilePosition()  = 10000

完整代码请戳这里

判断String中是否是数字、是否是汉字以及截取汉字与数字



猜你喜欢

转载自blog.csdn.net/erweidetaiyangxi/article/details/79085097