一个我写的把中文数字转换成integer的小工具

似乎阿拉伯数字转中文的有很多,中文转阿拉伯数字的没找到过,所以自己写了个。
只能转整数的,小数因为我的应用不会碰到所以没考虑,不过要加也很容易。
大家帮看下有什么问题没有,或者有什么改进的建议


之前的代码有些问题,在遇到“十”开头的时候会得到错误的结果。现在的为修改后的代码,大家帮看下是否还有其他问题


package com.mnv.crawler.parser.misc;

public class NumberParser {

/**
* 把中文数字解析为阿拉伯数字(Integer)
* @param chineseNumber 中文数字
* @return 阿拉伯数字(Integer),如果是无法识别的中文数字则返回-1
*/
public static int parseChineseNumber(String chineseNumber){
chineseNumber=chineseNumber.replace("仟", "千");
chineseNumber=chineseNumber.replace("佰", "百");
chineseNumber=chineseNumber.replace("拾", "十");
chineseNumber=chineseNumber.replace("玖", "九");
chineseNumber=chineseNumber.replace("捌", "八");
chineseNumber=chineseNumber.replace("柒", "七");
chineseNumber=chineseNumber.replace("陆", "六");
chineseNumber=chineseNumber.replace("伍", "五");
chineseNumber=chineseNumber.replace("肆", "四");
chineseNumber=chineseNumber.replace("叁", "三");
chineseNumber=chineseNumber.replace("贰", "二");
chineseNumber=chineseNumber.replace("壹", "一");
return parseChineseNumber(chineseNumber,1);
}

/**
* 把中文数字解析为阿拉伯数字(Integer)
* @param preNumber 第二大的进位
* @param chineseNumber 中文数字
* @return 阿拉伯数字(Integer),如果是无法识别的中文数字则返回-1
*/
private static int parseChineseNumber(String chineseNumber,int preNumber){
int ret=0;
if(chineseNumber.indexOf("零")==0){
int index=0;
int end=chineseNumber.length();
String prefix=chineseNumber.substring(index+1,end);
ret=parseChineseNumber(prefix,1);
}else if(chineseNumber.indexOf("亿")!=-1){
int index=chineseNumber.indexOf("亿");
int end=chineseNumber.length();
String prefix=chineseNumber.substring(0,index);
if(prefix.length()==0){
prefix="一";
}
String postfix=chineseNumber.substring(index+1,end);
ret=parseChineseNumber(prefix,1)*100000000+parseChineseNumber(postfix,10000000);
}else if(chineseNumber.indexOf("万")!=-1){
int index=chineseNumber.indexOf("万");
int end=chineseNumber.length();
String prefix=chineseNumber.substring(0,index);
if(prefix.length()==0){
prefix="一";
}
String postfix=chineseNumber.substring(index+1,end);
ret=parseChineseNumber(prefix,1)*10000+parseChineseNumber(postfix,1000);
}else if(chineseNumber.indexOf("千")!=-1){
int index=chineseNumber.indexOf("千");
int end=chineseNumber.length();
String prefix=chineseNumber.substring(0,index);
if(prefix.length()==0){
prefix="一";
}
String postfix=chineseNumber.substring(index+1,end);
ret=parseChineseNumber(prefix,1)*1000+parseChineseNumber(postfix,100);
}else if(chineseNumber.indexOf("百")!=-1){
int index=chineseNumber.indexOf("百");
int end=chineseNumber.length();
String prefix=chineseNumber.substring(0,index);
if(prefix.length()==0){
prefix="一";
}
String postfix=chineseNumber.substring(index+1,end);
ret=parseChineseNumber(prefix,1)*100+parseChineseNumber(postfix,10);
}else if(chineseNumber.indexOf("十")!=-1){
int index=chineseNumber.indexOf("十");
int end=chineseNumber.length();
String prefix=chineseNumber.substring(0,index);
if(prefix.length()==0){
prefix="一";
}
String postfix=chineseNumber.substring(index+1,end);
ret=parseChineseNumber(prefix,1)*10+parseChineseNumber(postfix,1);
}else if(chineseNumber.equals("一")){
ret=1*preNumber;
}else if (chineseNumber.equals("二")){
ret=2*preNumber;
}else if (chineseNumber.equals("三")){
ret=3*preNumber;
}else if (chineseNumber.equals("四")){
ret=4*preNumber;
}else if (chineseNumber.equals("五")){
ret=5*preNumber;
}else if (chineseNumber.equals("六")){
ret=6*preNumber;
}else if (chineseNumber.equals("七")){
ret=7*preNumber;
}else if (chineseNumber.equals("八")){
ret=8*preNumber;
}else if (chineseNumber.equals("九")){
ret=9*preNumber;
}else if (chineseNumber.length()==0){
ret=0;
}else {
ret=-1;
}
return ret;
}

public static void main(String[] args){
int a=1000000000;
System.out.println(parseChineseNumber("十亿"));
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值