数字自然读法
2015-06-04 07:17
666 查看
package test; import java.util.Arrays; import java.util.Collections; import java.util.Deque; import java.util.LinkedList; /** * * @author Administrator */ public class NianShuZi { /** * 本程序可读x为整数且-10^12 gt x lt 10^12 */ private static final String[] cnnumber = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; private static final String[] cnsep = {"万", "亿"}; private static final String[] limits = {"十", "百", "千"}; public static void main(String[] args) { String number = "100000101"; boolean negflag = false; if (number.contains("-")) { number = number.substring(1); negflag = true; } if (number.length() == 1 && Integer.parseInt(number) == 0) { System.out.println(cnnumber[0]); return; } String result = read12Digits(number); if (result.startsWith("一十")) { result = result.replaceFirst("一十", "十"); } result=result.replaceAll("零+", "零"); if (negflag) { result = "负" + result; } System.out.println(result); } //读lt4 private static String read4Digits(String[] numbers) { Deque<String> read = new LinkedList<String>(); boolean zeroFlag = true; for (int i = 0; i < numbers.length; i++) { if (i == 0) { if (!numbers[i].equals("0")) { read.addFirst(cnnumber[Integer.parseInt(numbers[i])]); } else { zeroFlag = false; } } else { if (numbers[i].equals("0")) { if (zeroFlag == true) { read.addFirst(cnnumber[Integer.parseInt(numbers[i])]); zeroFlag = false; } } else { read.addFirst(cnnumber[Integer.parseInt(numbers[i])] + limits[i - 1]); zeroFlag = true; } } } return read.toString(); } //读lt12 private static String read12Digits(String number) { String[] numbersAll = number.split("(?<=.)(?=.)"); Collections.reverse(Arrays.asList(numbersAll)); Deque<String> sb = new LinkedList<String>(); boolean partzeroflag = true; for (int i = 0; i < (numbersAll.length - 1) / 4 + 1; i++) { String[] numbers = Arrays.copyOfRange(numbersAll, i * 4, (i + 1) * 4 > numbersAll.length ? numbersAll.length : (i + 1) * 4); String readpart = read4Digits(numbers); int total = 0; for (String j : numbers) { total += Integer.parseInt(j); } if (i == 0) { if (total != 0) { sb.addFirst(readpart); } else { partzeroflag = false; } } else { if (total == 0) { if (partzeroflag == true) { sb.addFirst("零"); partzeroflag = false; } } else { sb.addFirst(readpart + cnsep[i - 1]); partzeroflag= true; } } } String result = sb.toString().replaceAll("\\p{ASCII}", ""); return result; } }
相关文章推荐
- OSChina 周四乱弹 —— 染上这病,你注定孤独终老
- 计算机系统原理之CPU中断技术
- bind server.c
- udacity android 学习笔记: lesson 4 part a
- mysql初识之数据文件及其他文件
- hdfs指令集
- PDO and MySQLi which is better
- socket通信
- 转:devise使用
- udacity android学习笔记: lesson 3
- PHP use MySQLi
- Construct Binary Tree from Inorder and Postorder Traversal
- 一步一步跟我学习lucene(18)---lucene索引时join和查询时join使用示例
- Skype for Business Server 2015-06-持久聊天服务器-3-配置
- udacity 之 android学习笔记:lesson 2
- Skype for Business Server 2015-06-持久聊天服务器-2-部署
- 微软发布的Win10开发者指南视频
- Skype for Business Server 2015-06-持久聊天服务器-1-设计拓朴
- Construct Binary Tree from Preorder and Inorder Traversal
- Go中iota是什么