似乎阿拉伯数字转中文的有很多,中文转阿拉伯数字的没找到过,所以自己写了个。
只能转整数的,小数因为我的应用不会碰到所以没考虑,不过要加也很容易。
大家帮看下有什么问题没有,或者有什么改进的建议
之前的代码有些问题,在遇到“十”开头的时候会得到错误的结果。现在的为修改后的代码,大家帮看下是否还有其他问题
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 实现数字转换人民币中文大写工具是一个非常实用的工具,能够满足人事业务系统中的各种需求,同时也可以应用于其他领域,例如财务报表、日常业务处理等。
在数字与汉字转换中,我们通常涉及到的是数字到汉字的大写数字转换,这是因为在中文环境下,大写的汉字数字常用于正式的财务报告和发票中,以增加数据的可读性和准确性。例如,1 对应 "壹",2 对应 "贰",以此类推,...
在Android开发中,有时我们需要将数字转换为中文或者将金额以大写的格式显示,这在财务应用或一些需要中文表示数字的场景中尤其常见。本文将深入探讨如何在Android环境中实现这一功能,包括数字转中文以及数字金额转...
本例子提供了一个解决方案,将数字如"78.79"转化为汉字的大写形式,即"柒拾捌元柒角玖分"。 首先,我们需要理解汉字大写数字的基本规则。在中文中,阿拉伯数字1至9对应的汉字大写分别是壹、贰、叁、肆、伍、陆、柒...
总之,C#中的金额大小写转换类是一个实用的工具,通过精心设计的算法和数据结构,可以将数字金额准确且高效地转换为中文大写形式。这个过程涉及到了字符串处理、数值运算以及对中文数字习惯的理解,是C#开发者在处理...
此方法接受一个Double类型的数字和一个表示所需小数位数的Integer,然后返回一个表示该数字的百分比字符串。例如,将0.5转换为"50.00%"。这在显示百分比值时非常方便,比如统计学中的比例或增长率。 4. **百分数转 ...
在开发过程中,经常需要将阿拉伯数字转换为汉字数字,以便于更好地与中文环境集成。在本文中,我们将详细介绍Java实现阿拉伯数字转换为汉字数字的源代码,供大家参考。 首先,需要了解阿拉伯数字和汉字数字的基本...
接下来,我们可以编写一个方法,接收阿拉伯数字作为输入,按照规则将其转换成汉字大写: ```java public static String convertToChinese(String number) { // 对数字进行格式化,确保只有正整数或正小数 number ...
例如,"浮点数与十进制数转换工具.exe"这个程序可能就是一个简单的用户界面,允许用户输入一个浮点数或十进制数,然后进行相互转换。这样的工具在处理数字时非常有用,比如在编写需要显示或读取浮点数的软件,或者在...
标题中的“进制转换工具类”指的是一个编程中用于进行不同进制之间转换的实用工具类。在计算机科学中,进制转换是非常基础且重要的概念,常见的进制有二进制(Binary)、八进制(Octal)、十进制(Decimal)和十六...
中文大写数字分为个、十、百、千、万、亿等单位,每个数字对应一个特定的汉字。例如,数字1对应"壹",数字2对应"贰",以此类推。在Delphi中,我们可以创建一个字典或者数组,将阿拉伯数字与对应的中文大写数字映射...
在VB.NET 2010中,开发一个中文数字大写转换程序是一项常见的任务,尤其在财务和会计领域,因为中文大写数字是银行转账、发票等正式文档中经常使用的格式。这个程序的核心功能是将阿拉伯数字(0-9)转换成对应的中文...
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种基于拉丁字母的一套电脑编码系统,它用7位二进制数来表示128个不同的字符,包括英文大小写字母、数字、标点符号以及一些...
1. `Integer.parseInt(String s, int radix)`:这个静态方法将一个表示特定基数的字符串转换为对应的整数值。例如,`Integer.parseInt("1010", 2)`会将二进制数"1010"转换为十进制的10。 2. `Integer.toString(int ...
`to_i` 方法会尝试从字符串的开头找到一个可解析为整数的部分,并返回该整数。如果字符串中包含非数字字符,它会忽略这些字符。如果字符串为空,`to_i` 返回 0。 接下来,我们看看其他编程语言中如何处理这个转换:...
例如,将一个int类型的数字转换成字符串: ```java int num = 123; String strNum = Integer.toString(num); // 或者 String strNum = String.valueOf(num); ``` 这些方法内部实现会根据数字的大小和进制...
VB提供了一个内置函数`IsNumeric`,用于判断一个表达式是否可以转换为数字。如果表达式可以转换成数字,`IsNumeric`返回True,否则返回False。例如: ```vb Dim str As String = "123" If IsNumeric(str) Then ' ...
(三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”, 万位、元位也是“0’,但千位、角位不是“0”时,中文大写金额中 可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成 人民币壹...
在给定的标题和描述中,“把数字用声音读出来”指的是使用VB来实现一个功能,即程序能够将数字转化为语音,朗读出来。这个功能在辅助技术、教育软件或者简单的用户交互应用中非常有用,尤其是对于视力障碍者或儿童...