`
itace
  • 浏览: 178518 次
  • 性别: 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 实现

    中文数字从个位到高位依次是:一(1)、二(2)、三(3)、四(4)、五(5)、六(6)、七(7)、八(8)、九(9)、十(10)、百(100)、千(1000)、万(10000)、亿(100000000)。而阿拉伯数字则是0-9这十个...

    中文数字转换阿拉伯数字

    在IT领域,中文数字转换阿拉伯数字是一个常见的编程需求,尤其在中国的文化背景下,有时需要将中文表述的数字转化为阿拉伯数字用于计算或数据处理。这个任务涉及到自然语言处理(NLP)和字符串处理技术,通常通过...

    中文数字转换为阿拉伯数字

    将一段字符串中的中文数字转换为阿拉伯数字,也可将阿拉伯数字转换为中文数字

    中文数字转化成阿拉伯数字

    中文数字包括个、十、百、千、万、亿等单位,每个单位对应阿拉伯数字的一个或几个位数。例如,“一”对应“1”,“二”对应“2”,“三”对应“3”,“十”对应“10”,“百”对应“100”,以此类推。在转化过程中,...

    中文数字转换为阿拉伯数字,范围1-999

    改代码支持将中文数字转换为阿拉伯数字,转换的范围到999为止,并且只能转换简单整数

    汉语大写数字转换成阿拉伯数字

    汉语大写数字转换成阿拉伯数字。支持如下转换 '一千二百二十一万九千三百五十七亿一千二百二十一万九千零五十七', '一千二百二十一', '一千零十', '一万零一百', '一千零十一', '一万零一百十一', '一千二百...

    c和lua的中文和阿拉伯数字互转

    在本案例中,我们关注的是C语言和Lua语言之间中文数字(语音数字)与阿拉伯数字的互转。这两种语言各有其特点,C语言是一种底层、高效的语言,常用于系统编程和嵌入式开发;而Lua则是一种轻量级的脚本语言,常用于...

    delphi阿拉伯数字转换成中文写法

    把阿拉伯数字转为汉字写法比如123456789转化为零壹贰叁肆伍陆柒捌玖,以及几百几千几万的数字都可以转化

    java实现阿拉伯数字 转换为 汉字数字 算法

    java实现阿拉伯数字 转换为 汉字数字 算法

    转换汉字数字为阿拉伯数字

    输入万亿以下汉字数,可变为相应阿拉伯数字,附易语言源码,例如:五百八十万四千六百五十五对应为5804655

    阿拉伯数字转换为中文小写数字

    在Android开发过程中,有时我们需要将阿拉伯数字(1, 2, 3...)转换成中文小写数字(一,二,三...),特别是在涉及到文化习惯或者用户界面本地化的时候,如书籍页码显示。这个任务涉及到字符串处理和字符映射,下面...

    阿拉伯数字转中文数字(vb)

    在提供的压缩包文件中,虽然没有具体的代码示例,但“转大写(RMB)”可能是指进一步将转换后的中文数字格式化为人民币大写的表示,如“伍亿伍仟伍佰壹拾壹元整”。这部分功能可以作为扩展,增加对货币符号和整数...

    中文数字转换阿拉伯数字.rar

    - 例如,将“一千二百三十四万五千六百七十八”转换为阿拉伯数字,需按照“千”、“万”、“亿”的进位规则,先将“一千”转换为1000,“二百三十四”转换为234,“万”进位为10000,“五千六百七十八”转换为5678...

    阿拉伯数字转中文数字.rar

    不满意现有的阿拉伯数字转中文数字代码的效果,自己写了一个更加地道的代码,将如“一十一”等处理成“十一”;最大处理16位数字,具体数位规则如下:16(千兆),15(百兆),14(十兆),13(兆),12(千亿),11(百亿),10...

    mysql oracle 阿拉伯数字转中文数字

    mysql oracle 阿拉伯数字转中文数字, 亲测可用.找了很长时间才找到,

    汉语数字串与阿拉伯数字串间转换小工具(C源码)

    汉语数字是以汉字形式表示数字,如"一"代表1,"二"代表2,"三"代表3,以此类推,而阿拉伯数字则是0-9这十个符号构成的数字系统。两者间的转换需要将汉字字符映射到对应的阿拉伯数字,反之亦然。 在这个小工具中,`...

    将阿拉伯数字转换为汉字数字或者汉字大写金额

    1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...

    将阿拉伯数字转换为汉字数字

    在IT领域,编程时常需要处理数字的显示问题,特别是在与用户交互时,有时需要将阿拉伯数字(例如1234567.009)转换为汉字数字(如“一百二十三万四千五百六十七点零零九”)。这个任务在中文环境下尤其重要,因为...

Global site tag (gtag.js) - Google Analytics