`
itace
  • 浏览: 185484 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

中文数字转阿拉伯数字(最大不超过1万亿)

    博客分类:
  • java
 
阅读更多

 

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DigitUtil {
	
	private static Map<String, Integer> MAP_ALPHA = new HashMap<String, Integer>();
	static{
		MAP_ALPHA.put("一", 1);
		MAP_ALPHA.put("二", 2);
		MAP_ALPHA.put("三", 3);
		MAP_ALPHA.put("四", 4);
		MAP_ALPHA.put("五", 5);
		MAP_ALPHA.put("六", 6);
		MAP_ALPHA.put("七", 7);
		MAP_ALPHA.put("八", 8);
		MAP_ALPHA.put("九", 9);
	}
	/**
	 * 目前只支持1万亿以下
	 * @param text
	 */
	public static long getArabicDigit(String text){
		int b=text.length();
		if (b>23) {
			return 0;
		}
		long count = 0;
		if (text.indexOf("亿")>-1) {//text>1亿
			String[]u = text.split("亿");
			String num_yi = u[0];
			int yi = getThousands(num_yi);
			count+=yi*100000000l;
			if (u.length>1) {
				if (u[1].indexOf("万")>-1) {
					String[]v = u[1].split("万");
					String num_wan = v[0];
					int wan = getThousands(num_wan);
					count+=wan*10000;
					if (v.length>1) {
						String num = v[1];
						int p = getThousands(num);
						count+=p;
					}
				}else {
					int p = getThousands(u[1]);
					count+=p;
				}
			}
		}else if (text.indexOf("万")>-1) {//text<1亿&&text>1万
			String[]v = text.split("万");
			String num_wan = v[0];
			int wan = getThousands(num_wan);
			count+=wan*10000;
			if (v.length>1) {
				String num = v[1];
				int p = getThousands(num);
				count+=p;
			}
		}else {//text<1万&&text>0
			int p = getThousands(text);
			count+=p;
		}
		return count;
	}
	/**
	 * 处理一万以内
	 */
	public static int getThousands(String text){
		text = text.replaceAll("零", "");
		int count = 0;
		if (text.contains("千")) {
			String u = getUnitDigit(text, "千");
			text = text.replaceAll(u, "");
			if (u.length()>0) {
				int qian = MAP_ALPHA.get(u.replaceAll("千", ""));
				count+=qian*1000;
			}
		}
		if (text.contains("百")) {
			String u = getUnitDigit(text, "百");
			text = text.replaceAll(u, "");
			if (u.length()>0) {
				int bai = MAP_ALPHA.get(u.replaceAll("百", ""));
				count+=bai*100;
			}
		}
		if (text.contains("十")) {
			String u = getUnitDigit(text, "十");
			text = text.replaceAll(u, "");
			if (u.length()==0) {
				u="一十";
			}
			if (u.length()>0) {
				int shi = MAP_ALPHA.get(u.replaceAll("十", ""));
				count+=shi*10;
			}
		}
		if (MAP_ALPHA.keySet().contains(text)) {
			int ge = MAP_ALPHA.get(text);
			count+=ge;
		}
		return count;
	}
	/**
	 * 获取字符串中的单位前的数
	 * @param text
	 * @param unit
	 * @return
	 */
	public static String getUnitDigit(String text,String unit) {
		String regexp = "[一二三四五六七八九]{1}"+unit;
		Pattern pattern = Pattern.compile(regexp, 2);
		Matcher matcher = pattern.matcher(text);
		StringBuffer sb = new StringBuffer();
		while (matcher.find()) {
			sb.append(matcher.group());
		}
		return sb.toString();
	}
	//思路2:遇到零处理时,split”零“,2数相加
	public static void main(String[] args) {
		String t = "九千零十亿零三百一十万三千零五";
		try {
			long s = getArabicDigit(t);
			System.out.println(s);
		} catch (Exception e) {
//			e.printStackTrace();
			System.out.println("chinese digit not support");
		}
	}
}

 

分享到:
评论

相关推荐

    JAVA版数字转中文念法

    此程序能够支持的最大数字为亿级别,即能够处理的最大输入为9位数字(不包括小数点)。 #### 三、核心算法解析 为了实现数字到中文的转换,程序采用了一种较为简单直观的方法,主要包括以下几个步骤: 1. **初始化...

    C#数字转大写。重铸优化版(dll类库)

    当数字超过99时,会按照千、万、亿等单位进行划分,并用对应的中文大写表示。例如,1234567890会被转换为“壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾”。 `Digit2CNup.dll`是这个功能的核心动态链接库文件,它包含了...

    C#商品金额大小写转换

    在C#编程中,将商品金额的阿拉伯数字转换为汉字大写形式,是常见的金融或会计软件中的一个功能。这通常涉及到数字与汉字字符的映射关系,以及金额单位的正确添加。以下是一些关于这个主题的重要知识点: 1. **数字...

    人民币大小写转换,整带整和零

    1. **数字到汉字的转换**:人民币的大写形式使用汉字进行表示,例如1(壹)、2(贰)、3(叁)等,而小写则是阿拉伯数字。转换过程中,每个数字都有对应的汉字形式,包括个、十、百、千、万、亿等单位。 2. **整数...

    小写金额转大写金额工具

    小写金额通常用阿拉伯数字表示,如123456.78,而大写金额则是用汉字来表示,如壹拾贰万叁仟肆佰伍拾陆元柒角捌分,以防止篡改和增加账目的准确性。"小写金额转大写金额工具"就是专门针对这一需求设计的软件应用。 ...

    将rmb数字位钱数转化为中文钱数的js函数

    特别是在财务领域,涉及到货币金额的表示时,有时需要将阿拉伯数字格式的金额转化为中文大写,以符合某些特定的财务规范。本文将详细介绍一个JavaScript函数,用于将人民币(RMB)的数字形式转换为中文大写。 函数...

    gt23l16u2w用户手册

    字库内容极其丰富,不仅包括汉字和ASCII字符,还覆盖了拉丁文系、希腊文系、基里尔文系和阿拉伯文系等文字,总字符数达到惊人的数万之多。11x12点和15x16点的Unicode点阵字库,支持GB13000标准,确保了广泛的字符...

Global site tag (gtag.js) - Google Analytics