public class ChineseNumberParsing {
    // 通过中文数字字符,在该字符串中查找其对应的数值或其表示的数位
    // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
    // 零 一 二 三 四 五 六 七 八 九 十 百 千 万 亿
    private static final String dic = "零一二三四五六七八九十百千万亿";

// 反向的数字模板
    private static final String model = "个十百千万十百千亿十百千";

/**
     * 解析中文数字字符串,获取它所表示的数值
     *
     * @param numberZhString
     *            中文数字字符串
     * @return 中文数字字符串所代表的数值
     */
    public static long parseLong(String numberZhString) {
        if (numberZhString == "") {
            return 0;
        }
        // 将传入的中文数字字符串倒置 eg.五千万零九百零三 -> 三零百九零万千五
        numberZhString = new StringBuffer(numberZhString).reverse().toString();

// 声明一个数组,与反向的数字模板对应
        char[] resultChars = new char[12];
        // 将结果字符数组使用字符0初始化
        for (int i = 0; i < resultChars.length; i++) {
            resultChars[i] = '0';
        }

// i -- 用来遍历numberZhString的数组下标
        // j -- 用来访问resultChars的数组下标
        for (int i = 0, j = 0; i < numberZhString.length(); i++) {
            // 依次取出numberZhString中的字符,如三,零,百,千
            char c = numberZhString.charAt(i);

// 查找字符c所对应的数值或表示的数位
            // 如:三对应3,百对应11代表百位或百万位或百亿位
            int t = dic.indexOf(c);
            // 如果字符c代表一个数值,将该数值转化为数字字符,并存入resultChars.
            if (t >= 1 && t <= 9) {
                resultChars[j] = (char) (t + '0');
            }
            // 如果字符c代表一个数位,移动resultChars的数组下标j
            else if (t >= 10 && t <= 14) {
                j = model.indexOf(c, j);
            }
            // 如果字符c代表0,什么也不做
            else if (t == 0) {

}
            // 否则,抛出运行期异常
            else {
                throw new RuntimeException("中文数字字符串包含非法字符!只能包含以下字符:"
                        + "零、一、二、三、四、五、六、七、八、九、十、百、千、万、亿");
            }
        }

// 获取resultChars的字符串形式
        String resultString = String.copyValueOf(resultChars);
        // 将该字符串倒置
        resultString = new StringBuffer(resultString).reverse().toString();

// 将该字符串解析为long返回
        return Long.parseLong(resultString);
    }

/**
     * 返回长整数l的中文表示形式
     */
    public static String toString(long l) {
        String numberString = Long.toString(l);
        numberString = new StringBuffer(numberString).reverse().toString();

char[] resultChars = new char[12];
        for (int i = 0; i < resultChars.length; i++) {
            resultChars[i] = '零';
        }

for (int i = 0; i < numberString.length(); i++) {
            resultChars[i] = dic.charAt(numberString.charAt(i) - '0');
        }

StringBuffer resultStringBuffer = new StringBuffer(20);
        for (int i = 0; i < numberString.length(); i++) {
            if (i == 4) {
                resultStringBuffer.append('万');
            }
            if (i == 8) {
                resultStringBuffer.append('亿');
            }
            if (resultChars[i] != '零') {
                if (i == 4 || i == 8) {
                    resultStringBuffer.append(resultChars[i]);
                } else {
                    resultStringBuffer.append("" + model.charAt(i)
                            + resultChars[i]);
                }
            } else {
                if (resultStringBuffer.charAt(resultStringBuffer.length() - 1) != '零'
                        && resultStringBuffer.charAt(resultStringBuffer
                                .length() - 1) != '万'
                        && resultStringBuffer.charAt(resultStringBuffer
                                .length() - 1) != '亿') {
                    resultStringBuffer.append('零');
                }
            }
        }

resultStringBuffer.deleteCharAt(0);
        resultStringBuffer.reverse();
        return resultStringBuffer.toString();
    }

public static void main(String[] args) {
        System.out.println(ChineseNumberParsing.parseLong("九百零三"));
        System.out.println(ChineseNumberParsing.toString(907300250302L));
    }
}

本文出自 “中强” 博客,请务必保留此出处http://htgylzhq.blog.51cto.com/1602429/800791

Java解析中文数字字符串相关推荐

  1. java 将中文数字转阿拉伯数字

    java 将中文数字转为阿拉伯数字 由于项目需求要将中文数字转为阿拉伯数字,找了一些博客有些不满足需求.于是参考了一些博客完成以下代码 /*** 中文数字*/private static char[] ...

  2. c语言数字储存于变量,用C语言写中文数字字符串转数值变量

    用C语言写中文数字字符串转数值变量 C语言写中文数字字符转数值变量 最近突发奇想:程序中要是输入一串中文数字,如"十万"就能自动识别转换成数值100000储存到变量里该多好. 也许 ...

  3. java中文数字改阿拉伯数字_[Java教程]Java实现中文数字转换为阿拉伯数字

    [Java教程]Java实现中文数字转换为阿拉伯数字 0 2015-05-19 16:00:20 /** * 中文數字转阿拉伯数组[十万九千零六十 --> 109060] * @author 雪 ...

  4. java 正则表达式 中文数字和字母_Java中过滤出字母、数字和中文的正则表达式 | 学步园...

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...

  5. java 正则表达式 中文数字和字母_Java中过滤出字母、数字和中文的正则表达式...

    1.Java中过滤出字母.数字和中文的正则表达式 (1)过滤出字母的正则表达式 [^(A-Za-z)] (2)过滤出数字的正则表达式 [^(0-9)] (3)过滤出中文的正则表达式 [^(\\u4e0 ...

  6. 如何把中文数字字符串转成十六进制byte[]

    "3阿"如何转换才能得到 结果: 0xa3 0xb3 0xb0 0xa2 byte[] arr = Encoding.UTF-8.GetBytes("3阿"); ...

  7. Java 数字转中文数字(会计格式与非会计格式,暂不包含小数)

    数字转中文数字(123–>"壹佰贰拾叁"."一百二十三") 直接上代码,注释完整,各位网友如有其它好的方案,麻烦留言探讨,万分感谢! package fu ...

  8. 中文数字文字转换成阿拉伯数字

    在参考率网络上的部分代码后,写了一个简单的转换方法,原本是想用在抓取电子书中的标题使用的,比如,"第一千三百零二章"转换成1302 1 /// <summary> 2 ...

  9. 逆向工程核心原理读书笔记-API钩取之计算器显示中文数字

    我们通过一个示例来练习向计算机进程插入用户的DLL文件,钩取负责向计算器显示文本的SetWindowTextW,使得计算器中显示中文数字而不是原来的阿拉伯数字.钩取前后的原理图如下所示. 下面我们先测 ...

最新文章

  1. git 操作命令整理
  2. Luogu P4709 信息传递 (群论、生成函数、多项式指数函数)
  3. JavaScript(JS)之简单介绍
  4. 解决 | 此数据库文件跟当前sql server实例不兼容 sql server2008无法连接到(local)...
  5. 进程控制1--fork vfork函数
  6. cas java单点登录_java单点登录系统CAS的简单使用
  7. 完美海报设计的4个技巧
  8. 设计模式--6大原则--依赖倒置原则
  9. 2021-2025年中国电动毛巾散热器行业市场供需与战略研究报告
  10. pkr车牌识别系统服务器,交安通PKR停车场车牌识别管理系统
  11. 分享一个数据库在线文档系统
  12. SpringBoot 定时任务实现数据同步方法
  13. SpringCloud2020 学习笔记(十五)Spring Cloud Eureka 自我保护机制 关闭
  14. MacBook上有哪些相见恨晚的神器
  15. 织梦cms怎么上传html模板,织梦dedecms 本地模板安装图文方法
  16. 论文阅读------Stochastic Gradient Descent with Differentially Private updates
  17. 2020 年我学习到的 20 条软件工程准则
  18. 【正本清源】关于extern、static、const的正确使用方法
  19. 安装tomcat后运行Tomcat8.exe一闪而逝解决方案
  20. 没有期刊申请清华博士_清华大学博士毕业不要求发表论文?大家不要再误读了......

热门文章

  1. iOS实现文字渐变效果
  2. 大数据分析可视化工具怎么选
  3. 运营商大数据的市场价值有哪些
  4. 大数据分析平台的重点发展方向
  5. 购买物联网卡应该注意哪些问题?
  6. linux命令grep如何使用,Linux命令之grep命令简单使用
  7. 一元php主机,php 一元分词算法
  8. c语言c99标准_从年薪10万到年薪30万,C语言程序员必读的5本书
  9. python报表自动化系列 - 为pandas.DataFrame制作自然数索引(更改索引为从1开始的自然数)
  10. echarts3 graph java_echarts 3.0 使用自定义图标