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

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

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


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

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实现数字转换人民币中文大写工具

    Java 实现数字转换人民币中文大写工具 ...Java 实现数字转换人民币中文大写工具是一个非常实用的工具,能够满足人事业务系统中的各种需求,同时也可以应用于其他领域,例如财务报表、日常业务处理等。

    Delphi实现数字与汉字的转换

    在数字与汉字转换中,我们通常涉及到的是数字到汉字的大写数字转换,这是因为在中文环境下,大写的汉字数字常用于正式的财务报告和发票中,以增加数据的可读性和准确性。例如,1 对应 "壹",2 对应 "贰",以此类推,...

    Android中数字转中文,金额转大写

    在Android开发中,有时我们需要将数字转换为中文或者将金额以大写的格式显示,这在财务应用或一些需要中文表示数字的场景中尤其常见。本文将深入探讨如何在Android环境中实现这一功能,包括数字转中文以及数字金额转...

    阿拉伯数字金额转换为大写数字金额

    本例子提供了一个解决方案,将数字如"78.79"转化为汉字的大写形式,即"柒拾捌元柒角玖分"。 首先,我们需要理解汉字大写数字的基本规则。在中文中,阿拉伯数字1至9对应的汉字大写分别是壹、贰、叁、肆、伍、陆、柒...

    c#金额大小写转换类

    总之,C#中的金额大小写转换类是一个实用的工具,通过精心设计的算法和数据结构,可以将数字金额准确且高效地转换为中文大写形式。这个过程涉及到了字符串处理、数值运算以及对中文数字习惯的理解,是C#开发者在处理...

    数字处理工具.docx

    此方法接受一个Double类型的数字和一个表示所需小数位数的Integer,然后返回一个表示该数字的百分比字符串。例如,将0.5转换为"50.00%"。这在显示百分比值时非常方便,比如统计学中的比例或增长率。 4. **百分数转 ...

    java实现阿拉伯数字转汉字数字

    在开发过程中,经常需要将阿拉伯数字转换为汉字数字,以便于更好地与中文环境集成。在本文中,我们将详细介绍Java实现阿拉伯数字转换为汉字数字的源代码,供大家参考。 首先,需要了解阿拉伯数字和汉字数字的基本...

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

    接下来,我们可以编写一个方法,接收阿拉伯数字作为输入,按照规则将其转换成汉字大写: ```java public static String convertToChinese(String number) { // 对数字进行格式化,确保只有正整数或正小数 number ...

    浮点数与十进制数转换工具

    例如,"浮点数与十进制数转换工具.exe"这个程序可能就是一个简单的用户界面,允许用户输入一个浮点数或十进制数,然后进行相互转换。这样的工具在处理数字时非常有用,比如在编写需要显示或读取浮点数的软件,或者在...

    进制转换工具类

    标题中的“进制转换工具类”指的是一个编程中用于进行不同进制之间转换的实用工具类。在计算机科学中,进制转换是非常基础且重要的概念,常见的进制有二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六...

    数字转换中文大写语音播报

    中文大写数字分为个、十、百、千、万、亿等单位,每个数字对应一个特定的汉字。例如,数字1对应"壹",数字2对应"贰",以此类推。在Delphi中,我们可以创建一个字典或者数组,将阿拉伯数字与对应的中文大写数字映射...

    vb.net2010 大写数字转换程序

    在VB.NET 2010中,开发一个中文数字大写转换程序是一项常见的任务,尤其在财务和会计领域,因为中文大写数字是银行转账、发票等正式文档中经常使用的格式。这个程序的核心功能是将阿拉伯数字(0-9)转换成对应的中文...

    java编写的数制转换器

    1. `Integer.parseInt(String s, int radix)`:这个静态方法将一个表示特定基数的字符串转换为对应的整数值。例如,`Integer.parseInt("1010", 2)`会将二进制数"1010"转换为十进制的10。 2. `Integer.toString(int ...

    java实现字符转换成十六进制的ASCII码

    ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种基于拉丁字母的一套电脑编码系统,它用7位二进制数来表示128个不同的字符,包括英文大小写字母、数字、标点符号以及一些...

    convert string to integer

    `to_i` 方法会尝试从字符串的开头找到一个可解析为整数的部分,并返回该整数。如果字符串中包含非数字字符,它会忽略这些字符。如果字符串为空,`to_i` 返回 0。 接下来,我们看看其他编程语言中如何处理这个转换:...

    java 源码 (数字转换2)

    例如,将一个int类型的数字转换成字符串: ```java int num = 123; String strNum = Integer.toString(num); // 或者 String strNum = String.valueOf(num); ``` 这些方法内部实现会根据数字的大小和进制...

    VB 判断字符和数字

    VB提供了一个内置函数`IsNumeric`,用于判断一个表达式是否可以转换为数字。如果表达式可以转换成数字,`IsNumeric`返回True,否则返回False。例如: ```vb Dim str As String = "123" If IsNumeric(str) Then ' ...

    大小写金额转换-源码

    (三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”, 万位、元位也是“0’,但千位、角位不是“0”时,中文大写金额中 可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成 人民币壹...

    把数字用声音读出来

    在给定的标题和描述中,“把数字用声音读出来”指的是使用VB来实现一个功能,即程序能够将数字转化为语音,朗读出来。这个功能在辅助技术、教育软件或者简单的用户交互应用中非常有用,尤其是对于视力障碍者或儿童...

Global site tag (gtag.js) - Google Analytics