首页 >Java >java教程 >如何在 Java 中将数字转换为单词?

如何在 Java 中将数字转换为单词?

Susan Sarandon
Susan Sarandon原创
2024-12-21 18:39:17902浏览

How can I convert numbers to words in Java?

Java 中数字转换为单词

简介:

我们经常会遇到需要将数值转换为单词的场景他们相应的单词表示。在 Java 中,没有直接执行此转换的内置函数。但是,通过一些自定义代码,我们可以开发一个满足我们要求的解决方案。

自定义解决方案:

我们可以创建一个自定义类来处理转换过程。让我们分解一下该方法:

第 1 步:处理小数字(0 到 99)

  • 创建一个包含 0 到 19 数字名称的数组 (numNames)。
  • 要处理“二十”和“三十”这样的数字,请创建另一个包含十个名称的数组(tensNames)。

第 2 步:转换两位数

  • 将数字除以 100,得到百位数。
  • 模数除以 100 得到剩下的两位数(余数)。
  • 从 numNames 中获取百位数字的名称。
  • 使用循环使用 numNames 和tensNames 构造剩余两位数字的单词表示。

第三步:转换三位数

  • 重复三位数的过程。
  • 除以 1000 得到千位(千),然后进行模除得到剩余的三位数。
  • 附加 numNames 中的千位数名称和 "千”到结果。

第 4 步:转换更大数字

  • 对百万、十亿等遵循相同的过程。
  • 将数字除以适当的 10 次方以提取相应的位数。
  • 模除以获得剩余的数字。
  • 附加正确的大小(例如,“百万”, “billion”)到结果。

示例代码:

此代码演示了自定义解决方案:

import java.text.DecimalFormat;

public class EnglishNumberToWords {

  private static final String[] tensNames = {
    "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
  };

  private static final String[] numNames = {
    "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
    "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen",
    "seventeen", "eighteen", "nineteen"
  };

  private EnglishNumberToWords() {}

  private static String convertLessThanOneThousand(int number) {
    // Handle numbers between 0 and 99
    String soFar;
    if (number % 100 < 20){
      soFar = numNames[number % 100];
      number /= 100;
    }
    else {
      soFar = numNames[number % 10];
      number /= 10;
      soFar = tensNames[number % 10] + soFar;
      number /= 10;
    }
    if (number == 0) return soFar;
    return numNames[number] + " hundred" + soFar;
  }

  public static String convert(long number) {
    if (number == 0) { return "zero"; }
    String snumber = Long.toString(number);
    String mask = "000000000000";
    DecimalFormat df = new DecimalFormat(mask);
    snumber = df.format(number);
    // Handle billions, millions, hundred thousands, and thousands separately
    int billions  = Integer.parseInt(snumber.substring(0,3));
    int millions  = Integer.parseInt(snumber.substring(3,6));
    int hundredThousands = Integer.parseInt(snumber.substring(6,9));
    int thousands = Integer.parseInt(snumber.substring(9,12));
    String tradBillions;
    switch (billions) {
    case 0:
      tradBillions = "";
      break;
    case 1 :
      tradBillions = convertLessThanOneThousand(billions) + " billion ";
      break;
    default :
      tradBillions = convertLessThanOneThousand(billions) + " billion ";
    }
    String result =  tradBillions;
    String tradMillions;
    switch (millions) {
    case 0:
      tradMillions = "";
      break;
    case 1 :
      tradMillions = convertLessThanOneThousand(millions) + " million ";
      break;
    default :
      tradMillions = convertLessThanOneThousand(millions) + " million ";
    }
    result =  result + tradMillions;
    String tradHundredThousands;
    switch (hundredThousands) {
    case 0:
      tradHundredThousands = "";
      break;
    case 1 :
      tradHundredThousands = "one thousand ";
      break;
    default :
      tradHundredThousands = convertLessThanOneThousand(hundredThousands) + " thousand ";
    }
    result =  result + tradHundredThousands;
    String tradThousand;
    tradThousand = convertLessThanOneThousand(thousands);
    result =  result + tradThousand;
    return result.replaceAll("^\s+", "").replaceAll("\b\s{2,}\b", " ");
  }
}

用法:

System.out.println(EnglishNumberToWords.convert(123456789));
// Output: "one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine"

结论:

使用此自定义解决方案,您可以将数值转换为轻松高效地表达他们的文字。

以上是如何在 Java 中将数字转换为单词?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn