转换截取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