本文实例讲述了Java实现将数字日期翻译成英文单词的工具类。分享给大家供大家参考,具体如下:
package com.sunyard.etp.ag.util;
import java.math.BigDecimal;
import java.util.Arrays;
public class DateEngUtil {
public static void main(String[] args) {
// TODO Auto-generated method stub
String dd="19870401";
String res=formatDateEng(dd);
System.out.println(dd+",英文==="+res);
String dd2="19000823";
String res2=formatDateEng(dd2);
System.out.println(dd2+",英文==="+res2);
String dd3="20001231";
String res3=formatDateEng(dd3);
System.out.println(dd3+",英文==="+res3);
String dd4="20121116";
String res4=formatDateEng(dd4);
System.out.println(dd4+",英文==="+res4);
String dd5="20150901";
String res5=formatDateEng(dd5);
System.out.println(dd5+",英文==="+res5);
//支持最多4位数字的翻译
String nn1="12";
String r1=translateNum9999NoZero(nn1);
System.out.println(nn1+",英文==="+r1);
String nn2="561";
String r2=translateNum9999NoZero(nn2);
System.out.println(nn2+",英文==="+r2);
String nn3="5589";
String r3=translateNum9999NoZero(nn3);
System.out.println(nn3+",英文==="+r3);
String cardNum="6210910002000718183";
String cardn=translateCardNumber(cardNum);
System.out.println(cardNum+",英文==="+cardn);
String fff="3394.56";
System.out.println("钱"+fff+"==="+translateMoney(fff));
String fff2="123456789123456.45";
System.out.println("钱"+fff2+"==="+translateMoney(fff2));
String fff3="78.00";
System.out.println("钱"+fff3+"==="+translateMoney(fff3));
String fff4="12000089103456.45";
System.out.println("钱"+fff4+"==="+translateMoney(fff4));
String fff5="123456789.12";
System.out.println("钱"+fff5+"==="+translateMoney(fff5));
String p1="0%";
System.out.println("百分比"+p1+"==="+translatePercent(p1));
String p2="0.0%";
System.out.println("百分比"+p2+"==="+translatePercent(p2));
String p3="0.00%";
System.out.println("百分比"+p3+"==="+translatePercent(p3));
String p4="0.23%";
System.out.println("百分比"+p4+"==="+translatePercent(p4));
String p5="0.05%";
System.out.println("百分比"+p5+"==="+translatePercent(p5));
String p6="56.00%";
System.out.println("百分比"+p6+"==="+translatePercent(p6));
String p7="56.67%";
System.out.println("百分比"+p7+"==="+translatePercent(p7));
String p8="237.90%";
System.out.println("百分比"+p8+"==="+translatePercent(p8));
}
public static String formatDate(String Date){
try{
return Date.substring(0,4)+"年"+Date.substring(4,6)+"月"+Date.substring(6,8)+"日";
}catch (Exception e) {
return "";
}
}
public static String formatDateEng(String Date){
if(Date==null||Date.trim().equals("")){
return "";
}
if(Date.trim().length()<8){
return "";
}
String DateStr=Date.trim();
String year=DateStr.substring(0,4);
String month=DateStr.substring(4,6);
String date2=DateStr.substring(6,8);
String res="";
res=translateYear(year)+", "+translateMonth(month)+", "+translateDate(date2);
return res;
}
public static String translateYear(String year) {
if (year == null || year.trim().equals("")) {
return "";
}
String res = "";
int yearNum = Integer.valueOf(year);
if(year.endsWith("00")){//xx00
switch (yearNum) {
case 2000:
res = "two thousand";//
break;
case 1900:
res = "nineteen hundred";//
break;
case 1800:
res = "eighteen hundred";//
break;
case 1700:
res = "seventeenth hundred";//
break;
case 1600:
res = "sixteenth hundred";//
break;
case 1500:
res = "fifteenth hundred";//
break;
default:
res = "";
}
}else{//19xx,20xx,21xx
String qian2=year.substring(0, 2);
String hou2=year.substring(2, 4);
int qian2Num = Integer.valueOf(qian2);
int hou2Num = Integer.valueOf(hou2);
if(year.startsWith("20")){//20xx
res = "two thousand and "+translateNum20wei(hou2Num);
}else{//19xx,21xx
res = translateNum20wei(qian2Num)+" "+translateNum20wei(hou2Num);
}
}
return res;
}
public static String translateMonth(String month) {
if (month == null || month.trim().equals("")) {
return "";
}
String res = "";
int mon = Integer.valueOf(month);
switch (mon) {
case 1:
res = "January";// Jan
break;
case 2:
res = "February";// Feb
break;
case 3:
res = "March";// Mar
break;
case 4:
res = "April";// Apr
break;
case 5:
res = "May";// May
break;
case 6:
res = "June";// Jun
break;
case 7:
res = "July";// Jul
break;
case 8:
res = "August";// Aug
break;
case 9:
res = "September";// Sep
break;
case 10:
res = "October";// Oct
break;
case 11:
res = "November";// Nov
break;
case 12:
res = "December";// Dec
break;
default:
res = "";
}
return res;
}
public static String translateDate(String date) {
if (date == null || date.trim().equals("")) {
return "";
}
String res = "";
int dateNum = Integer.valueOf(date);
switch (dateNum) {
case 1:
res = "first";//
break;
case 2:
res = "second";//
break;
case 3:
res = "third";//
break;
case 4:
res = "fourth";//
break;
case 5:
res = "fifth";//
break;
case 6:
res = "sixth";//
break;
case 7:
res = "seventh";//
break;
case 8:
res = "eigth";//
break;
case 9:
res = "ninth";//
break;
case 10:
res = "tenth";//
break;
case 11:
res = "eleventh";//
break;
case 12:
res = "twelfth";//
break;
case 13:
res = "thirteenth";//
break;
case 14:
res = "fourteenth";//
break;
case 15:
res = "fifteenth";//
break;
case 16:
res = "sixteenth";//
break;
case 17:
res = "seventeenth";//
break;
case 18:
res = "eighteenth";//
break;
case 19:
res = "nineteenth";//
break;
case 20:
res = "twentieth";//
break;
case 21:
res = "twenty first";//
break;
case 22:
res = "twenty second";//
break;
case 23:
res = "twenty third";//
break;
case 24:
res = "twenty fourth";//
break;
case 25:
res = "twenty fifth";//
break;
case 26:
res = "twenty sixth";//
break;
case 27:
res = "twenty seventh";//
break;
case 28:
res = "twenty eigth";//
break;
case 29:
res = "twenty ninth";//
break;
case 30:
res = "thirtieth";//
break;
case 31:
res = "thirty first";//
break;
default:
res = "";
}
return res;
}
/////////////////
public static String translateNum19(int num){
String res = "";
switch (num) {
case 0:res = " ";break;
case 1:res = "one";break;
case 2:res = "two";break;
case 3:res = "three";break;
case 4:res = "four";break;
case 5:res = "five";break;
case 6:res = "six";break;
case 7:res = "seven";break;
case 8:res = "eight";break;
case 9:res = "nine";break;
case 10:res = "ten";break;
case 11:res = "eleven";break;
case 12:res = "twelve";break;
case 13:res = "thirteen";break;
case 14:res = "fourteen";break;
case 15:res = "fifteen";break;
case 16:res = "sixteen";break;
case 17:res = "seventeen";break;
case 18:res = "eighteen";break;
case 19:res = "nineteen";break;
default:
res = "";
}
return res;
}
public static String translateNum2090(int num){
String res = "";
switch (num) {
case 20:res = "twenty";break;
case 30:res = "thirty";break;
case 40:res = "forty";break;
case 50:res = "fifty";break;
case 60:res = "sixty";break;
case 70:res = "seventy";break;
case 80:res = "eighty";break;
case 90:res = "ninety";break;
default:
res = "";
}
return res;
}
public static String translateNum20wei(int num){
String res = "";
int zheng=num/10;//十位
int yu=num%10;//个位
if(num<20){
if(num<10){
res="zero"+translateNum19(num);
}else{
res=translateNum19(num);
}
}else{
res=translateNum2090(zheng*10)+" "+translateNum19(yu);
}
return res;
}
public static String translateNum20weiNoZero(int num){
String res = "";
int zheng=num/10;//十位
int yu=num%10;//个位
if(num<20){
res=translateNum19(num);
}else{
res=translateNum2090(zheng*10)+" "+translateNum19(yu);
}
return res;
}
public static String translateNum9999NoZero(int num){
String res = "";
int qian=num/1000;//千位
int last3=num%1000;
int bai=last3/100;//百位
int last2=num%100;
int shi=last2/10;//十位
int ge=num%10;//个位
if(qian!=0){
res+=translateNum19(qian)+" thousand ";
}
if(bai!=0){
res+=translateNum19(bai)+" hundred ";
}
String last2eng=translateNum20weiNoZero(last2);
if(!res.equals("")&&!(last2eng.trim().equals(""))){
res+=" and ";
}
res+=last2eng+" ";
return res;
}
public static String translateNum9999NoZero(String num){
if(num==null||num.trim().equals("")){
return "";
}
int nn=Integer.valueOf(num);
return translateNum9999NoZero(nn);
}
////////////////////////////////////////下面是英文数字的直白读法,应用场景:卡号/////////////////////////////
public static String translateNum09(int num){
String res = "";
switch (num) {
case 0:res = "zero";break;
case 1:res = "one";break;
case 2:res = "two";break;
case 3:res = "three";break;
case 4:res = "four";break;
case 5:res = "five";break;
case 6:res = "six";break;
case 7:res = "seven";break;
case 8:res = "eight";break;
case 9:res = "nine";break;
default:
res = "";
}
return res;
}
public static String translateCardNumber(String number){
if(number==null||number.trim().equals("")){
return "";
}
String res = "";
String numstr=number.trim();
char[] numArr=numstr.toCharArray();
for(int i=0;i15){
return "";
}
String res = "";
String moneyStr=moneyStr1.trim();
String[] moneyArr=getThreeArr(moneyStr);
if(moneyArr[0]!=null&&!moneyArr[0].trim().equals("")){
res+=translateNum9999NoZero(moneyArr[0].trim())+" trillion, ";
}
if(moneyArr[1]!=null&&!moneyArr[1].trim().equals("")){
res+=translateNum9999NoZero(moneyArr[1].trim())+" billion, ";
}
if(moneyArr[2]!=null&&!moneyArr[2].trim().equals("")){
res+=translateNum9999NoZero(moneyArr[2].trim())+" million, ";
}
if(moneyArr[3]!=null&&!moneyArr[3].trim().equals("")){
res+=translateNum9999NoZero(moneyArr[3].trim())+" thousand, ";
}
if(moneyArr[4]!=null&&!moneyArr[4].trim().equals("")){
res+=translateNum9999NoZero(moneyArr[4].trim())+" ";
}
return res;
}
//翻译小数点后面的数字,其实就是按位直接翻译单个数字即可。
public static String translateMoney2(String moneyStr2){
return translateCardNumber(moneyStr2);
}
public static String[] getThreeArr(String number){
if(number==null||number.trim().equals("")){
return null;
}
String[] res= new String [5];
BigDecimal dd=new BigDecimal("0");
BigDecimal bd1000=new BigDecimal("1000");
// dd.divideAndRemainder(divisor)
try{
dd=new BigDecimal(number.trim());//123,456,789,222,555
BigDecimal dd30=dd.divideAndRemainder(bd1000)[1];//3wei,555(0是整数,1是余数)
BigDecimal dd2=dd.divideAndRemainder(bd1000)[0];//123,456,789,222
BigDecimal dd64=dd2.divideAndRemainder(bd1000)[1];//thousand,222
BigDecimal dd3=dd2.divideAndRemainder(bd1000)[0];//123,456,789(0是整数,1是余数)
BigDecimal dd97=dd3.divideAndRemainder(bd1000)[1];//million,789
BigDecimal dd4=dd3.divideAndRemainder(bd1000)[0];////123,456
BigDecimal dd1210=dd4.divideAndRemainder(bd1000)[1];//billion,456
BigDecimal dd5=dd4.divideAndRemainder(bd1000)[0];////123
BigDecimal dd1513=dd5.divideAndRemainder(bd1000)[1];//trillion,123
res[0]=dd1513.toString();
res[1]=dd1210.toString();
res[2]=dd97.toString();
res[3]=dd64.toString();
res[4]=dd30.toString();
for(int i=0;i=0;i--){
strre+=String.valueOf(str2.charAt(i));//反序后
}
return strre;
}
/////////////////////////////翻译百分比,例如12.12%///////////////////////////////////////
public static String translatePercent(String percentNum){
if(percentNum==null||percentNum.trim().equals("")||!(percentNum.trim().endsWith("%"))){
return "";
}
String res = "";
String percent=percentNum.trim().substring(0, percentNum.indexOf("%"));
String percent1="";
String percent2="";
if(percent.indexOf(".")!=-1){//有小数点
percent1=percent.trim().substring(0, percent.indexOf("."));
percent2=percent.trim().substring(percent.indexOf(".")+1);
}else{
percent1=percent;
percent2="";
}
double nu=Double.valueOf(percent);
if(nu==0){
res="zero point zero zero percent";
}else{
double nu2=Double.valueOf(percent1);
if(nu2==0){
res+=" zero ";
}
res+=translateNum9999NoZero(percent1)+" point "+translateCardNumber(percent2)+" percent ";
}
return res;
}
}
运行结果:
更多关于java相关内容感兴趣的读者可查看本站专题:《java日期与时间操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。



