Java源文件名:ReadChineseTest.java
package java1;
/**
* @author com.whocares@183
* @version 1.0
*/
import java.util.Scanner;
public class ReadChineseTest {
//全局变量
static String[] chNum = new String[]{"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};//将对应数字中文化
static String[] bits = new String[]{"十", "百", "千"};//单位
static int count = 0;
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String result = "";
int zeros14 = 0, zeros58 = 0;
while(true) {
result = "";
count = 0;
zeros14 = 0;
zeros58 = 0;
System.out.println("请输入一个整数:");
long longNum = scan.nextLong();//输入整数的代码
String str = String.valueOf(longNum);
String str2 = "", str3 = "", str4 = "";
int len = str.length();//求出这个长整数的位数
if(len <= 4){
System.out.println(method1(str));
}else if(len <= 8){
for(int i = 0;i < len;i++){//计算出在第五位到第八位的字符串具体值,赋值给str2
if(i < len-4) {
str2 += str.charAt(i);//5-8位
}else {
str3 += str.charAt(i);//1-4位
}
}
zeros14 = methods3(str3);
if(zeros14 == 4){//如果1-4位都为0的话,值位true
result += method1(str2) + "万";
}else {
str3 = methods4(str3);//判断1-4位是否有前置0
if (count == 0) {
result += method1(str2) + "万" + method1(str3);
} else {
result += method1(str2) + "万零" + method1(str3);
}
}
System.out.println(result);
}else if(len <= 12){
for(int i = 0;i < len;i++){
if(i < len - 8){
str2 += str.charAt(i);//9-12位
}else if(i < len - 4){
str3 += str.charAt(i);//5-8位
}else {
str4 += str.charAt(i);//1-4位
}
}
zeros14 = methods3(str4);
count = 0;//千万不要忘记重置变量
zeros58 = methods3(str3);
if(zeros14 == 4 && zeros58 == 4){//当第1-8位全部为0的情况
result += method1(str2) + "亿";
}else if(zeros14 != 4 &&zeros58 == 4){//1-4位不均为0,5-8位均为0
result += method1(str2) + "亿零" + method1(str4);
}else if(zeros14 == 4 && zeros58 != 4) {//1-4位为0,5-8位不全为0
zeros58 = methods3(str3);
if(zeros58 != 0) {//如果前置有0,则输出一个零
result += method1(str2) + "亿零" + method1(str3) + "万";
}else {
result += method1(str2) + "亿" + method1(str3) + "万";
}
}else {//剩下的一种情况是1-9位都不为0
str3 = methods4(str3);//判断5-8位是否有前置0
if (count == 0) {
result += method1(str2) + "亿" + method1(str3);
} else {
result += method1(str2) + "亿零" + method1(str3);
}
count = 0;//重置count的初始值
str4 = methods4(str4);//判断5-8位是否有前置0
if (count == 0) {
result += "万" + method1(str4);
} else {
result += "万零" + method1(str4);
}
}
System.out.println(result);
}
}
}
public static String method1(String str) {
str = methods4(str);//删除前置0
int len = str.length(), num;//len是str的字符串长度
String result = "";
//计算四位数的方法
if (len == 4 ) {
//情况一:这个数为四位数(最高位不为零)并且第二、三、四位数均为0的情况(有三个0的情况)
if ((str.charAt(1) == '0') && (str.charAt(2) == '0') && (str.charAt(3) == '0')) {
result += chNum[str.charAt(0) - 48] + "千";
return result;
}
//情况二:这个数为四位数(最高位不为零)并且第二位和第三位为0的情况,在以下情况不用考虑最后一位,因为可以推理出最后一位数一定部位不为0
//(有两个0的情况的第一种)如1008
if((str.charAt(1) == '0') && (str.charAt(2) == '0') && str.charAt(0) !=0){
result += chNum[str.charAt(0) - 48] + "千" + "零" + chNum[str.charAt(3) - 48];
return result;
}
//情况三:这个数为四位数(最高位不为零)并且第三位和第四位为0的情况,在以下情况不用考虑最后一位,因为可以推理出最后一位数一定部位不为0
//有两个0的情况的第二种如1800(有两种0的情况的第三种在下面的普通情况下输出正确,不用考虑,如1080)
if((str.charAt(2) == '0') && (str.charAt(3) == '0')){
result += chNum[str.charAt(0) - 48] + "千" + chNum[str.charAt(1) - 48] + "百";
return result;
}
}
//计算三位数的方法
if(len == 3){
//情况一:存在两个0的情况如;100
if((str.charAt(1) == '0')&&(str.charAt(2) == '0')){
result += chNum[str.charAt(0) - 48] + "百";
return result;
}
}
return method2(str);
}
//数字中文读法的普遍情况的代码如下:
public static String method2(String str){
int len = str.length(), num;//len是str的字符串长度
String result = "";
for (int i = 0; i < len; i++) {
num = str.charAt(i) - 48;//将字符化为整数,比如‘1’化为1
if (i != len - 1 && num != 0) {//当这个数不是最后一位且不是零的时候
result += chNum[num] + bits[len - 2 - i];
} else if ((num == 0) && (i == len - 1) && len != 1) {;//空语句当num==0时,而且这个数不是一位数时,//
// 并且这个0是最后一位数,则该0不应该被读出。
} else {
result += chNum[num];
}
}
return result;
}
//查看前置0的个数,如0900、0090
public static int methods3(String str){
count = 0;
while(str.charAt(count) == '0'){
count++;
if(count == 4){
break;
}
}
return count;
}
//删除前置0,即删除0900前面的0,得到字符串“900”
public static String methods4(String str){
String str1 = "";
int temp = methods3(str);
if(temp == 0){
return str;
}else{
for(int i = temp; i < str.length();i++){
str1 += str.charAt(i);
}
}
return str1;
}
}