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