Java实现将数字日期翻译成英文单词的工具类实例

发布时间 - 2026-01-11 03:26:36    点击率:

本文实例讲述了Java实现将数字日期翻译成英文单词的工具类。分享给大家供大家参考,具体如下:

package com.sunyard.etp.ag.util;
import java.math.BigDecimal;
import java.util.Arrays;
public class DateEngUtil {
  /**
   * @param args
   */
  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);
    /*
19870401,英文===nineteen eighty seven, April, first
19000823,英文===nineteen hundred, August, twenty third
20001231,英文===two thousand, December, thirty first
20121116,英文===two thousand and twelve, November, sixteenth
20150901,英文===two thousand and fifteen, September, first
     */
    //支持最多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);
    /*
12,英文===twelve
561,英文===five hundred and sixty one
5589,英文===five thousand five hundred and eighty nine
     */
    String cardNum="6210910002000718183";
    String cardn=translateCardNumber(cardNum);
    System.out.println(cardNum+",英文==="+cardn);
/*
6210910002000718183,英文=== six two one zero nine one zero zero zero two zero zero zero seven one eight one eight three
     */
    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));
    /*
钱3394.56===three thousand, three hundred and ninety four  point five six
钱123456789123456.45===one hundred and twenty three trillion, four hundred and fifty six billion, seven hundred and eighty nine million, one hundred and twenty three thousand, four hundred and fifty six  point four five
钱78.00===seventy eight  point zero zero
钱12000089103456.45===twelve trillion, eighty nine million, one hundred and three thousand, four hundred and fifty six  point four five
钱123456789.12===one hundred and twenty three million, four hundred and fifty six thousand, seven hundred and eighty nine  point one two
     */
    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));
    /*
百分比0%===zero point zero zero percent
百分比0.0%===zero point zero zero percent
百分比0.00%===zero point zero zero percent
百分比0.23%=== zero  point two three percent
百分比0.05%=== zero  point zero five percent
百分比56.00%===fifty six point zero zero percent
百分比56.67%===fifty six point six seven percent
百分比237.90%===two hundred and thirty seven point nine zero percent
     */
  }
  /**
   * 格式化日期
   *
   * @return
   *
   */
  public static String formatDate(String Date){
    try{
       return Date.substring(0,4)+"年"+Date.substring(4,6)+"月"+Date.substring(6,8)+"日";
     }catch (Exception e) {
       return "";
     }
  }
  /**
   * 格式化日期转化成能播报的英文
   *
   * @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;
  }
  /**
   * 年转化成英文单词
   * @param month
   * @return
   */
  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;
  }
  /**
   * 月份转化成英文单词
   * @param month
   * @return
   */
  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;
  }
  /**
   * 几号转化成英文单词
   * @param date
   * @return
   */
  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;
  }
  /////////////////
  /**
   * 翻译1-19
   * @param num
   * @return
   */
  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;
  }
  /**
   * 翻译十几,二十几的读法
   * @param num
   * @return
   */
  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;
  }
  /**
   * 翻译2位数字的读法
   * @param num
   * @return
   */
  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;
  }
  /**
   * 翻译2位数字的读法
   * @param num
   * @return
   */
  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;
  }
  /**
   * 翻译数字的读法,最多支持到9999,即4位
   * @param num
   * @return
   */
  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);
  }
  ////////////////////////////////////////下面是英文数字的直白读法,应用场景:卡号/////////////////////////////
  /**
   * 翻译0123456789
   * @param num
   * @return
   */
  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;
  }
  /**
   * 把卡号翻译成英文单词。
   * 参数是已传数字,不能有任何其他字符
   * @param number
   * @return
   */
  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;i<numArr.length;i++){
      char ai=numArr[i];
      String ain=Character.toString(ai);
      int bi=Integer.valueOf(ain);
//     System.out.println(translateNum09(bi));
      res+=" "+translateNum09(bi);
    }
    return res;
  }
  ////////////////////////////////////////下面是英文数字的读法,应用场景:钱/////////////////////////////
  /**
   * 参数是数字,可以带最多2位小数,最大支持到亿亿,即15位数字(小数点前面15位)。
   * 例如:123456789123456.78
   *
   * 英文数字按3位读,单位都是3位一个单位,所以按3位先分好组,再翻译成单词。
   * 例如:123,456,789,123,456.78
   * 读作:
   * one hundred and twenty three trillion,
   * four hundred and fifty six billion,
   * seven hundred and sixty nine million,
   * one hundred and twenty three thousand,
   * four hundred and fifty six
   * point seven eight
   *
   */
  public static String translateMoney(String money){
    if(money==null||money.trim().equals("")){
      return "";
    }
    String res = "";
    String moneyStr=money.trim();
    String moneyStr1="";
    String moneyStr2="";
    if(moneyStr.indexOf(".")!=-1){//有小数点
      moneyStr1=moneyStr.substring(0, (moneyStr.indexOf(".")));
      moneyStr2=moneyStr.substring(moneyStr.indexOf(".")+1);
    }else{
      moneyStr1=moneyStr;
      moneyStr2="";
    }
    String trans1=translateMoney1(moneyStr1);
    String trans2=translateMoney2(moneyStr2);
    if(trans1.trim().equals("")){
      res="zero point "+trans2;
    }else{
      res=trans1+" point "+trans2;
    }
    return res;
  }
  /**
   * //这个是翻译数字的整数部分,这才是关键
   *
   * 参数是数字,可以带最多2位小数,最大支持到亿亿,即15位数字(小数点前面15位)。
   * 例如:123456789123456.78
   *
   * 英文数字按3位读,单位都是3位一个单位,所以按3位先分好组,再翻译成单词。
   * 例如:123,456,789,123,456.78
   * 读作:
   * one hundred and twenty three trillion,
   * four hundred and fifty six billion,
   * seven hundred and sixty nine million,
   * one hundred and twenty three thousand,
   * four hundred and fifty six
   * point seven eight
   *
   */
  public static String translateMoney1(String moneyStr1){
    if(moneyStr1==null||moneyStr1.trim().equals("")||moneyStr1.length()>15){
      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);
  }
  /**
   *
例如
12345678
要得到
12 345 678
=============
算法如下:
先反序
87654321
从前往后3位截取
876 543 21
每个再反序
678 345 12
这个数组要反序,这就是要的结果
12 345 678
   * @param number
   * @return
   */
  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<res.length;i++){
        String nn=res[i];
        if(nn.trim().equals("0")){
          res[i]="";
        }
      }
    }catch(Exception e){
      return null;
    }
//   System.out.println("getThreeArr=="+Arrays.toString(res));
    return res;
  }
  //讲一个字符串反序
  public static String reverseStr(String str){
    if(str==null||str.trim().equals("")){
      return "";
    }
    String strre="";
    String str2=str.trim();
    for(int i=str2.length()-1;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程序设计有所帮助。


# Java  # 数字  # 日期  # 翻译  # 英文单词  # 工具类  # Java将数字金额转为大写中文金额  # java实现字符串和数字转换工具  # Java用正则对字符串进行处理并判断是否能转为数字  # Java常用数字工具类 数字转汉字(1)  # Java 如何将前端传来的数字转化为日期  # 英文  # 最多  # 转化成  # 翻译成  # 都是  # 反序  # 卡号  # 操作技巧  # 读作  # 相关内容  # 这就是  # 二十  # 感兴趣  # 数据结构  # 给大家  # 要得  # 十几  # 更多关于  # 所述  # 程序设计 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: java获取注册ip实例  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  如何利用DOS批处理实现定时关机操作详解  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Android自定义listview布局实现上拉加载下拉刷新功能  微信小程序 scroll-view组件实现列表页实例代码  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Firefox Developer Edition开发者版本入口  米侠浏览器网页背景异常怎么办 米侠显示修复  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  网页设计与网站制作内容,怎样注册网站?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  高端云建站费用究竟需要多少预算?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  详解jQuery中的事件  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel如何使用Collections进行数据处理?(实用方法示例)  音乐网站服务器如何优化API响应速度?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何在建站之星网店版论坛获取技术支持?  如何快速上传建站程序避免常见错误?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  网站制作软件有哪些,制图软件有哪些?  Laravel如何实现一对一模型关联?(Eloquent示例)  如何基于云服务器快速搭建网站及云盘系统?  iOS验证手机号的正则表达式  Python文件流缓冲机制_IO性能解析【教程】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何在云主机上快速搭建网站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何快速选择适合个人网站的云服务器配置?  C#如何调用原生C++ COM对象详解  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何在香港免费服务器上快速搭建网站?  如何用已有域名快速搭建网站?