`
lzj0470
  • 浏览: 1273553 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

中文数字转阿拉伯数字

    博客分类:
  • java
 
阅读更多

/**
 *  @author loiy
 *  www.agrilink.cn
 *  2012.11.30   
 */
import java.util.Hashtable;

public class DigitUtil {
	
	/**
	 * 汉字中的数字字符
	 */
	private static final Character[] SCDigits = {'零','一','二','三','四','五','六','七','八','九'};
	
	/**
	 * 阿拉伯数字
	 */
	private static final Character[] araDigits = {'0','1','2','3','4','5','6','7','8','9'};
	
	/**
	 * 阿拉伯数字
	 */
	private static Hashtable<Character, Character> araHash = new Hashtable<Character, Character>();
	
	/**
	 * 阿拉伯数字
	 */
	private static Hashtable<Character, Integer> YWQBSHash = new Hashtable<Character, Integer>();
	
	static {
		for (int i = 0; i < SCDigits.length; i++) {
			araHash.put(SCDigits[i], araDigits[i]);
		}
		YWQBSHash.put('亿', 100000000);
		YWQBSHash.put('万', 10000);
		YWQBSHash.put('千', 1000);
		YWQBSHash.put('百', 100);
		YWQBSHash.put('十', 10);
	}
	
	/**
	 * @param remain 剩下多少个字符
	 * @param curchar 当前分析的字符
	 */
	private static int ywqbs(int num, Boolean bool, int no, int remain, char curchar, char lastshow) {
		if(num == 0) {
			num += no;
			return num;
		} else {
			String numString = String.valueOf(num); // 将num转换成String
			String last = numString.substring(numString.length() - 1, numString.length()); // 获取最后一个字符
			String exceptlast = numString.substring(0, numString.length() - 1); // 获取除了最后一个字符所有字符串
			if(exceptlast.length() == 0) { // 说明num是个位值
				num = Integer.parseInt(last) * no;
				return num;
			} else {
				/***** 针对有连续的这些字符[十百千万亿] start *****/		
				if(bool && YWQBSHash.get(curchar) > YWQBSHash.get(lastshow)) { // 说明上个字符属于[十百千万亿]
					num *= no;
					return num;
				}
				/***** 针对有连续的这些字符[十百千万亿] end *****/
				/***** 分析到最后一个字符 start *****/
				/**** 针对这种情况(一千二百二十一万) ****/
				if(remain == 1 && YWQBSHash.get(curchar) > YWQBSHash.get(lastshow)) {
					num *= YWQBSHash.get(curchar);
					return num;
				}
				/**** 针对这种情况(一千二百二十一万) ****/
				/***** 分析到最后一个字符 end *****/
				/***** last如果为0 start *****/
				if(last.equals("0")) { // 循环到最后一位字符,last等于0
					last = "1"; // 
				}
				/***** last如果为0 end *****/
				exceptlast = exceptlast + "0"; // 缺少最后一位,需要补上
				num = Integer.parseInt(exceptlast) + Integer.parseInt(last) * no;
				return num;
			}
		}
	}
	
	public static int parse(String word) {		
		int num = 0;
		char lastchar = '一'; // 上次字符,字符特指[十百千万亿],默认随便填写一个'一'	
		char lastshow = '一'; // 上次出现的字符,字符特指[十百千万亿],默认随便填写一个'一'
		char[] ch = word.toCharArray();
		Boolean bool = false; // 是否连续出现[十百千万亿]
		for(int i = 0; i < ch.length; i++) {
			Character find = araHash.get(ch[i]);
			if(find != null) {
				num += Integer.parseInt(String.valueOf(find.charValue()));
				bool = false;
				lastchar = '一'; // 恢复到默认值
				continue;
			} else if(ch[i] == '十') {
				num = ywqbs(num, bool, 10, ch.length - i, ch[i], lastshow);
				bool = true;
				lastchar = '十';
				lastshow = '十';
			}else if(ch[i] == '千') {
				num = ywqbs(num, bool, 1000, ch.length - i, ch[i], lastshow);
				bool = true;
				lastchar = '千';
				lastshow = '千';
			} else if(ch[i] == '百') {
				num = ywqbs(num, bool, 100, ch.length - i, ch[i], lastshow);
				bool = true;
				lastchar = '百';
				lastshow = '百';
			} else if(ch[i] == '万') {
				num = ywqbs(num, bool, 10000, ch.length - i, ch[i], lastshow);
				bool = true;
				lastchar = '万';
				lastshow = '万';
			}
 		}
		ch = null;
		return num;
	}
	
	public static void main(String args[]) {
		String wordes[] = {
				"一千二百二十一万",
				"一千二百二十一",
				"一千零十",
				"一万零一百",
				"一千零十一",
				"一万零一百十一",
				"一千二百十九",
				"一千万"
		};
		for(int i = 0; i < wordes.length; i++) {
			DigitUtil t = new DigitUtil();
			int num = t.parse(wordes[i]);
			System.out.println(wordes[i] + " " + num);
		}
	}
	
}

转载请注明来处:http://www.agrilink.cn
0
0
分享到:
评论

相关推荐

    中文数字转换阿拉伯数字

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

    中文数字转成阿拉伯数字 java 实现

    这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元测试类。下面我们将深入探讨这个功能的实现及其相关知识点。 首先,我们要理解中文数字和阿拉伯...

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

    在编程领域,中文数字转化成阿拉伯数字是一项常见的需求,特别是在处理中文文本数据时。C#是一种广泛使用的面向对象的编程语言,它提供了丰富的库和工具来处理字符串和文本转换。本篇文章将深入探讨如何在C#中实现...

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

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

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

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

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

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

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

    - **单个汉字数字**:每个汉字对应一个阿拉伯数字,例如,“一”=1,“二”=2,“三”=3,直至“十”=10。 - **组合数字**:两个或更多汉字组成的数字,如“十一”=11,“十二”=12,需要理解其组合含义。 - **...

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

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

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

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

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

    这个工具对于处理中文数字和阿拉伯数字之间的转换问题非常实用,尤其在需要处理大量中文文本或进行数据格式化时。 首先,我们要理解汉语数字和阿拉伯数字的区别。汉语数字是以汉字形式表示数字,如"一"代表1,"二...

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

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

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

    阿拉伯数字有10个基本符号(0-9),而中文小写数字也有对应的十个汉字(零、一、二、三、四、五、六、七、八、九)。我们可以通过创建一个映射表来存储这种对应关系,例如: ```java Map, String&gt; numMap = new ...

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

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

    批量转换谐音数字为阿拉伯数字

    为便于操作,我使用Excel的Vbscrip功能编写了一个汉字转拼音(全拼)、中文数字转阿拉伯数字、谐音数字转阿拉伯数字的代码。 谐音转数字这个所涉及的字典太多,目前暂只考虑了0和字母o、零、琳、您转0的字典,其他...

    实现阿拉伯数字与中文数字转换的C程序代码

    实现阿拉伯数字与中文数字转换的C程序代码

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

    在编程领域,尤其是在Visual Basic(VB)环境中,有时我们需要处理数字格式化的需求,例如将阿拉伯数字转换为中文数字。这通常在财务、会计或者文化相关的软件应用中出现,因为中文数字在某些场合下更符合人们的阅读...

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

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

Global site tag (gtag.js) - Google Analytics