Java解析中文数字字符串
来源:互联网 发布:zerohedge怎么样 知乎 编辑:程序博客网 时间:2024/05/22 06:37
public class ChineseNumberParsing {
// 通过中文数字字符,在该字符串中查找其对应的数值或其表示的数位
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
// 零 一 二 三 四 五 六 七 八 九 十 百 千 万 亿
private static final String dic = "零一二三四五六七八九十百千万亿";
// 反向的数字模板
private static final String model = "个十百千万十百千亿十百千";
/**
* 解析中文数字字符串,获取它所表示的数值
*
* @param numberZhString
* 中文数字字符串
* @return 中文数字字符串所代表的数值
*/
public static long parseLong(String numberZhString) {
if (numberZhString == "") {
return 0;
}
// 将传入的中文数字字符串倒置 eg.五千万零九百零三 -> 三零百九零万千五
numberZhString = new StringBuffer(numberZhString).reverse().toString();
// 声明一个数组,与反向的数字模板对应
char[] resultChars = new char[12];
// 将结果字符数组使用字符0初始化
for (int i = 0; i < resultChars.length; i++) {
resultChars[i] = '0';
}
// i -- 用来遍历numberZhString的数组下标
// j -- 用来访问resultChars的数组下标
for (int i = 0, j = 0; i < numberZhString.length(); i++) {
// 依次取出numberZhString中的字符,如三,零,百,千
char c = numberZhString.charAt(i);
// 查找字符c所对应的数值或表示的数位
// 如:三对应3,百对应11代表百位或百万位或百亿位
int t = dic.indexOf(c);
// 如果字符c代表一个数值,将该数值转化为数字字符,并存入resultChars.
if (t >= 1 && t <= 9) {
resultChars[j] = (char) (t + '0');
}
// 如果字符c代表一个数位,移动resultChars的数组下标j
else if (t >= 10 && t <= 14) {
j = model.indexOf(c, j);
}
// 如果字符c代表0,什么也不做
else if (t == 0) {
}
// 否则,抛出运行期异常
else {
throw new RuntimeException("中文数字字符串包含非法字符!只能包含以下字符:"
+ "零、一、二、三、四、五、六、七、八、九、十、百、千、万、亿");
}
}
// 获取resultChars的字符串形式
String resultString = String.copyValueOf(resultChars);
// 将该字符串倒置
resultString = new StringBuffer(resultString).reverse().toString();
// 将该字符串解析为long返回
return Long.parseLong(resultString);
}
/**
* 返回长整数l的中文表示形式
*/
public static String toString(long l) {
String numberString = Long.toString(l);
numberString = new StringBuffer(numberString).reverse().toString();
char[] resultChars = new char[12];
for (int i = 0; i < resultChars.length; i++) {
resultChars[i] = '零';
}
for (int i = 0; i < numberString.length(); i++) {
resultChars[i] = dic.charAt(numberString.charAt(i) - '0');
}
StringBuffer resultStringBuffer = new StringBuffer(20);
for (int i = 0; i < numberString.length(); i++) {
if (i == 4) {
resultStringBuffer.append('万');
}
if (i == 8) {
resultStringBuffer.append('亿');
}
if (resultChars[i] != '零') {
if (i == 4 || i == 8) {
resultStringBuffer.append(resultChars[i]);
} else {
resultStringBuffer.append("" + model.charAt(i)
+ resultChars[i]);
}
} else {
if (resultStringBuffer.charAt(resultStringBuffer.length() - 1) != '零'
&& resultStringBuffer.charAt(resultStringBuffer
.length() - 1) != '万'
&& resultStringBuffer.charAt(resultStringBuffer
.length() - 1) != '亿') {
resultStringBuffer.append('零');
}
}
}
resultStringBuffer.deleteCharAt(0);
resultStringBuffer.reverse();
return resultStringBuffer.toString();
}
public static void main(String[] args) {
System.out.println(ChineseNumberParsing.parseLong("九百零三"));
System.out.println(ChineseNumberParsing.toString(907300250302L));
}
}
本文出自 “中强” 博客,请务必保留此出处http://htgylzhq.blog.51cto.com/1602429/800791
- Java解析中文数字字符串
- Java字符串排序中文+数字
- Java 字符串去中文(数字)
- 解析字符串中的数字
- 数字字符串的解析
- JAVA 将数字字符串转换成中文形式
- java判断字符串是否为数字或中文或字母
- java判断字符串是否为数字或中文或字母
- Java将数字字符串转换成中文形式
- java判断字符串是否为数字或中文或字母
- java统计一个字符串中中文,英文,数字的个数
- java判断字符串是否为数字或中文或字母
- java判断字符串是否为数字或中文或字母
- java判断字符串是否为数字或中文或字母
- java判断字符串是否为数字或中文或字母
- 检测字符串 字母数字中文
- java 转中文数字
- Java 数字转中文
- 代码坏味道与重构
- APIO2012-Dispatching[左偏树]
- Name Mangling in C++
- 动态结构(struct)的说明
- JavaScript程序开发(一)—JavaScript和ECMAScript异同
- Java解析中文数字字符串
- 今天开博。好好学习!
- 为什么我希望用C而不是C++来实现ZeroMQ
- 测试集_转换WEKA格式_保留版
- 字符串与数组的转换
- 一个合格程序员每天每月每年该做的事
- qwtplot3d 中的坐标系统
- google-perftools 简介
- MYSQL中出现data too long for column的解决方案