您的位置:首页 > 其它

数字自然读法

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: