论坛首页 Java企业应用论坛

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

浏览 1805 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-27   最后修改:2010-02-01
似乎阿拉伯数字转中文的有很多,中文转阿拉伯数字的没找到过,所以自己写了个。
只能转整数的,小数因为我的应用不会碰到所以没考虑,不过要加也很容易。
大家帮看下有什么问题没有,或者有什么改进的建议


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

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("十亿"));
	}
}

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics