Java实现读数字的问题,输入长整型数字,输出汉语里面的读法
2016-08-10 14:30
465 查看
输入:123L
输出:壹佰贰拾叁
代码:
import java.util.ArrayList;
import java.util.List;
public class NumT {
public static void main(String[] args) {
long num = 2010030L;
System.out.println(readNum(num));
}
private static String readNum(long num){
String s_num=num+"";
String s = "";
int numLen = s_num.length();
List<String> ls = new ArrayList<>();
if(numLen>16){
String hz = "乘以拾的"+num2str((numLen-1)+"")+"次方";
s=num2floatstr(s_num);
s=s+hz;
}else{
if(numLen%4==0){
int z = numLen/4;
for(int i=0;i<z;i++){
ls.add(s_num.substring(numLen-4*(i+1), numLen-4*i));
}
}else{
int z = numLen/4+1;
int lastSize = numLen%4;
int i=0;
for(;i<z-1;i++){
ls.add(s_num.substring(numLen-4*(i+1), numLen-4*i));
}
ls.add(s_num.substring(0,lastSize));
}
String[] dw = {"","万","亿","万亿"};
for(int i=0;i<ls.size();i++){
if(!ls.get(i).equals("0000")){
s=num2str(ls.get(i))+dw[i]+s;
}
}
}
return s;
}
private static String num2str(String str){
int size = str.length();
String[] dw = {"","拾","佰","仟"};
String s="";
for(int i=size;i>0;i--){
switch(str.charAt(i-1)){
case '0':s="零"+s;break;
case '1':s="壹"+dw[size-i]+s;break;
case '2':s="贰"+dw[size-i]+s;break;
case '3':s="叁"+dw[size-i]+s;break;
case '4':s="肆"+dw[size-i]+s;break;
case '5':s="伍"+dw[size-i]+s;break;
case '6':s="陆"+dw[size-i]+s;break;
case '7':s="柒"+dw[size-i]+s;break;
case '8':s="捌"+dw[size-i]+s;break;
case '9':s="玖"+dw[size-i]+s;break;
}
}
s = s.replaceAll("零{1,}", "零");
s = s.replaceAll("拾零", "拾");
return s;
}
private static String num2floatstr(String str){
int size = str.length();
String s = "";
for(int i=1;i<=size;i++){
switch(str.charAt(i-1)){
case '0':s=s+"零";break;
case '1':s=s+"壹";break;
case '2':s=s+"贰";break;
case '3':s=s+"叁";break;
case '4':s=s+"肆";break;
case '5':s=s+"伍";break;
case '6':s=s+"陆";break;
case '7':s=s+"柒";break;
case '8':s=s+"捌";break;
case '9':s=s+"玖";break;
}
if(i==1){
s = s+"点";
}
}
return s;
}
}
输出:壹佰贰拾叁
代码:
import java.util.ArrayList;
import java.util.List;
public class NumT {
public static void main(String[] args) {
long num = 2010030L;
System.out.println(readNum(num));
}
private static String readNum(long num){
String s_num=num+"";
String s = "";
int numLen = s_num.length();
List<String> ls = new ArrayList<>();
if(numLen>16){
String hz = "乘以拾的"+num2str((numLen-1)+"")+"次方";
s=num2floatstr(s_num);
s=s+hz;
}else{
if(numLen%4==0){
int z = numLen/4;
for(int i=0;i<z;i++){
ls.add(s_num.substring(numLen-4*(i+1), numLen-4*i));
}
}else{
int z = numLen/4+1;
int lastSize = numLen%4;
int i=0;
for(;i<z-1;i++){
ls.add(s_num.substring(numLen-4*(i+1), numLen-4*i));
}
ls.add(s_num.substring(0,lastSize));
}
String[] dw = {"","万","亿","万亿"};
for(int i=0;i<ls.size();i++){
if(!ls.get(i).equals("0000")){
s=num2str(ls.get(i))+dw[i]+s;
}
}
}
return s;
}
private static String num2str(String str){
int size = str.length();
String[] dw = {"","拾","佰","仟"};
String s="";
for(int i=size;i>0;i--){
switch(str.charAt(i-1)){
case '0':s="零"+s;break;
case '1':s="壹"+dw[size-i]+s;break;
case '2':s="贰"+dw[size-i]+s;break;
case '3':s="叁"+dw[size-i]+s;break;
case '4':s="肆"+dw[size-i]+s;break;
case '5':s="伍"+dw[size-i]+s;break;
case '6':s="陆"+dw[size-i]+s;break;
case '7':s="柒"+dw[size-i]+s;break;
case '8':s="捌"+dw[size-i]+s;break;
case '9':s="玖"+dw[size-i]+s;break;
}
}
s = s.replaceAll("零{1,}", "零");
s = s.replaceAll("拾零", "拾");
return s;
}
private static String num2floatstr(String str){
int size = str.length();
String s = "";
for(int i=1;i<=size;i++){
switch(str.charAt(i-1)){
case '0':s=s+"零";break;
case '1':s=s+"壹";break;
case '2':s=s+"贰";break;
case '3':s=s+"叁";break;
case '4':s=s+"肆";break;
case '5':s=s+"伍";break;
case '6':s=s+"陆";break;
case '7':s=s+"柒";break;
case '8':s=s+"捌";break;
case '9':s=s+"玖";break;
}
if(i==1){
s = s+"点";
}
}
return s;
}
}
相关文章推荐
- java实现在控制台输入亿以内的数字转换成汉语读法
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- 用Java 编一段代码,实现在控制台输入一组数字后,排序后在控制台输出
- java 输入一个数字,反转输出这个数字的值(实现方法)
- @V@ java代码笔记2010-06-12:java控制台输入各类型类实现;以及判断输入字符串里面是否有数字的两种方法:方法1:转换成字符数组;方法2:正则表达式。
- java实现将一个键盘输入的阿拉伯数字转化成中文输出
- java 实现接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写
- 数字问题之斐波那契数列全解<Java实现>
- 用VC实现PC并行端口数字信息的输入输出
- Java里面最简单好用的文件输入输出方法
- java实现字符串的反转 (如:输入abcd 输出dcba)见例解
- 6、 java 输入一个数字组成的数组,输出该数组的最大值和最小值
- java编程之计算16位长整型数字中0-9出现次数(从对话窗体输入数据)
- android、Java下判断两个String是否相等 、EditText输入是否为空,限定输入数字的实现 总结
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- android、Java下判断两个String是否相等 、EditText输入是否为空,限定输入数字的实现
- 数字问题之阶乘零数问题<Java实现>
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- 用VC实现PC并行端口数字信息的输入/输出
- 【每天算法1】:用java 语言实现,输入一个数,就相应地输出的几维数组