You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
NovelReader/app/src/main/java/com/monke/monkeybook/utils/NumberUtil.java

108 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//Copyright (c) 2017. 章钦豪. All rights reserved.
// 版权声明,表明代码的版权归属于章钦豪。
package com.monke.monkeybook.utils;
// 声明包名。
public class NumberUtil {
// 声明NumberUtil工具类用于数字转换相关的工具方法。
/**
* 中文数字转阿拉伯数字
*/
private static int chineseNumber2Int(String chineseNumber){
// 定义一个私有静态方法,用于将中文数字转换为阿拉伯数字。
int result = 0;
// 用于存储转换结果。
int temp = 1;//存放一个单位的数字如:十万
// 临时存储一个单位的数值如“十”则为10“百”则为100。
int count = 0;//判断是否有chArr
// 用于计数“千”、“万”、“亿”等单位出现的次数。
char[] cnArr = new char[]{'一','二','三','四','五','六','七','八','九'};
// 包含中文数字0-9的数组。
char[] chArr = new char[]{'十','百','千','万','亿'};
// 包含中文单位“十”、“百”、“千”、“万”、“亿”的数组。
for (int i = 0; i < chineseNumber.length(); i++) {
// 遍历输入的中文数字字符串。
boolean b = true;//判断是否是chArr
// 标记当前字符是否属于单位数组chArr。
char c = chineseNumber.charAt(i);
// 获取当前遍历到的字符。
for (int j = 0; j < cnArr.length; j++) {
//非单位,即数字
// 检查当前字符是否为数字('一'到'九')。
if (c == cnArr[j]) {
if(0 != count){
//添加下一个单位之前,先把上一个单位值添加到结果中
// 如果count不为0说明之前已经遇到了单位字符需要先计算之前的数值。
result += temp;
// 将临时数值累加到结果中。
temp = 1;
// 重置临时数值为1。
count = 0;
// 重置计数器。
}
// 下标+1就是对应的值
temp = j + 1;
// 将当前数字字符转换为对应的数值并更新temp。
b = false;
// 标记当前字符已处理。
break;
}
}
if(b){//单位{'十','百','千','万','亿'}
// 如果当前字符不是数字,那么它应该是一个单位。
for (int j = 0; j < chArr.length; j++) {
// 遍历单位数组,检查当前字符是否为单位。
if (c == chArr[j]) {
// 根据单位字符更新temp的值。
switch (j) {
case 0:
temp *= 10;
break;
case 1:
temp *= 100;
break;
case 2:
temp *= 1000;
break;
case 3:
temp *= 10000;
break;
case 4:
temp *= 100000000;
break;
default:
break;
}
count++;
// 每遇到一个单位字符,计数器增加。
}
}
}
if (i == chineseNumber.length() - 1) {
//遍历到最后一个字符
// 如果已经遍历到字符串的最后一个字符。
result += temp;
// 将最后一个单位的值累加到结果中。
}
}
return result;
// 返回转换后的阿拉伯数字。
}
}