似乎阿拉伯数字转中文的有很多,中文转阿拉伯数字的没找到过,所以自己写了个。
只能转整数的,小数因为我的应用不会碰到所以没考虑,不过要加也很容易。
大家帮看下有什么问题没有,或者有什么改进的建议
之前的代码有些问题,在遇到“十”开头的时候会得到错误的结果。现在的为修改后的代码,大家帮看下是否还有其他问题
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("十亿"));
}
}
分享到:
相关推荐
(三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”, 万位、元位也是“0’,但千位、角位不是“0”时,中文大写金额中 可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成 人民币壹...
当我把函数指针赋向void *类型的时候,编译通不过。 51 4.14 怎样在整型和指针之间进行转换?能否暂时把整数放入指针变量中,或者相反? 51 *4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行...
* 提供精确的String转换成double * @param v * @return */ public static double strPreDou(String v) { BigDecimal b = new BigDecimal(v); return b.doubleValue(); } /** * 提供精确的加法运算。 * @...
getLast(V[] sourceArray, V value, V defaultValue, boolean isCircle) 得到数组中某个元素前一个元素,isCircle表示是否循环 getNext(V[] sourceArray, V value, V defaultValue, boolean isCircle) 得到数组中...
当你把某一个函数调顺后,进行综合运算时,会出现很多新的问题。 高精度数据结构VB定义为: Type StrToZx '高精度数的结构头 ZhFhBz As Boolean '正负号标志 XsdWz As Long '小数点右边数字的长度。例1234.567中...
HelloNative.c 用C写的一个小程序 HelloNative.dll 用C生成的DLL文件 HelloNative.exp 用VC编译生成的辅助文件 HelloNative.h 用javah生成的C语言用的头文件 HelloNative.java 准备调用C函数的java文件 ...
在工作中经常会频繁使用一些方法、或做类型判断、数据转换等,为了方便,将一些功能封装成函数整理成工具集lao-utils 使用 Node.js npm install lao-utils --save AMD/CMD、浏览器环境 引入dist目录下源码文件 ...
VisualIntFactor将是一个交互式的教育和科学工具,展示在同一个六边形网格中的乘法,因子,一元计数和二进制整数之间的转换。 该网格基于帕斯卡三角形,该三角形是一维元胞自动机,通过将每个像元作为上下两个元胞的...
PL/SQL 基础,一个不错的 PL/SQL 参考手册。内容预览: ---- 第一章 PL/SQL 简介 ---- 1. Oracle应用编辑方法概览 1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用; 2) ODBC 3) OCI: C语言和...
小数分隔符用来将一个数字的整数部分与小数部分分隔开。其格式是 <decimal_character><group_separator>。 值范围: 任何单字节字符, '+', '-', ', '>' 除外。 默认值: 从 NLS_TERRITORY 中获得 nls_sort: 说明: ...
用法在一个打印作业中,应用程序能够最多同时定义8种字体。当应用程序需要使用更多的字体时,可以在使用了某个字体号输出内容后使用PrintDefineFont()函数将该字体号对应的字体更换为其它字体。 ----------------...
内容包括变量与常量、表达式和运算符、字符串、数字和符号、数组和类型化数组、对象、函数、集合和映射、迭代器和生成器、Promise对象与异步函数、代理、类和模块,最后引导读者自己动手写一个JS框架。 [1] 目录 第...
2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行...
宣告变量名称的同时,加上“final”关键词来限定,这个变量一但指定了值,就不可以再改变它的值 如:final int n1= 10; n1=20; 这就会报错 输出命令: System.out.println() 会自动换行的打印 System.out....
如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要...
如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要...
目录 第一篇 x86 基础 第1 章数与数据类型2 1.1 数 2 1.1.1 数字 2 1.1.2 二进制数 3 1.1.3 二进制数的排列 3 1.1.4 十六进制数 5 1.1.5 八进制数与十进制数 5 1.2 数据类型 6 1.2.1 integer 数 6 1.2.2 floating-...
目录 第一篇 x86 基础 第1 章数与数据类型2 1.1 数 2 1.1.1 数字 2 1.1.2 二进制数 3 1.1.3 二进制数的排列 3 1.1.4 十六进制数 5 1.1.5 八进制数与十进制数 5 1.2 数据类型 6 1.2.1 integer 数 6 1.2.2 floating-...
目录 第一篇 x86 基础 第1 章数与数据类型2 1.1 数 2 1.1.1 数字 2 1.1.2 二进制数 3 1.1.3 二进制数的排列 3 1.1.4 十六进制数 5 1.1.5 八进制数与十进制数 5 1.2 数据类型 6 1.2.1 integer 数 6 1.2.2 floating-...
目录 第一篇 x86 基础 第1 章数与数据类型2 1.1 数 2 1.1.1 数字 2 1.1.2 二进制数 3 1.1.3 二进制数的排列 3 1.1.4 十六进制数 5 1.1.5 八进制数与十进制数 5 1.2 数据类型 6 1.2.1 integer 数 6 1.2.2 floating-...