java如何将数字转换为英文

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何将数字转换为英文相关的知识,希望对你有一定的参考价值。

比如将123转换为one thousand two hundred thirty four

Java 数字转成英文
英文数词,按3位3位区分
Hundred: 100
Thousand:1,000
Million: 1,000,000
Billion: 1,000,000,000
Trillion: 1,000,000,000,000
Quintillion: 1,000,000,000,000,000,000
Sextillion: 1,000,000,000,000,000,000,000
Nonillion: 1,000,000,000,000,000,000,000,000,000,000
Centillion: 1 followed by 303 zeros
所以把数字字符串按3位分割,分别解析

public class NumUtil
public static final String[] enNum = // 基本数词表
"zero", "one", "tow", "three", "four", "five", "six", "seven", "eight",
"nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty", "", "", "", "", "", "", "", "", "", "thirty", "", "", "",
"", "", "", "", "", "", "fourty", "", "", "", "", "", "", "", "",
"", "fifty", "", "", "", "", "", "", "", "", "", "sixty", "", "",
"", "", "", "", "", "", "", "seventy", "", "", "", "", "", "", "",
"", "", "eighty", "", "", "", "", "", "", "", "", "", "ninety" ;
public static final String[] enUnit = "hundred", "thousand", "million",
"billion", "trillion", "quintillion" ; // 单位表
public static void main(String[] args)
System.out.println(analyze(1)); // 测试数据
System.out.println(analyze(21));
System.out.println(analyze(105));
System.out.println(analyze(3250));
System.out.println(analyze(47826));
System.out.println(analyze(56945781));

public static String analyze(long num) // long型参数,
return analyze(String.valueOf(num)); // 因为long型有极限,所以以字符串参数方法为主

public static String analyze(String num) // 数字字符串参数
// 判断字符串是否为数字
if (!num.matches("\\d+"))
return String.format("%s is not number", num);

num = num.replaceAll("^[0]*([1-9]*)", "$1"); // 把字符串前面的0去掉
if (num.length() == 0) // 如果长度为0,则原串都是0
return enNum[0];
else if (num.length() > 9) // 如果大于9,即大于999999999,题目限制条件
return "too big";

// 按3位分割分组
int count = (num.length() % 3 == 0) ? num.length() / 3
: num.length() / 3 + 1;
if (count > enUnit.length)
return "too big";
// 判断组单位是否超过,
// 可以根据需求适当追加enUnit
String[] group = new String[count];
for (int i = num.length(), j = group.length - 1; i > 0; i -= 3)
group[j--] = num.substring(Math.max(i - 3, 0), i);

StringBuilder buf = new StringBuilder(); // 结果保存
for (int i = 0; i < count; i++) // 遍历分割的组
int v = Integer.valueOf(group[i]);
if (v >= 100) // 因为按3位分割,所以这里不会有超过999的数
buf.append(enNum[v / 100]).append(" ").append(enUnit[0])
.append(" ");
v = v % 100; // 获取百位,并得到百位以后的数
if (v != 0)
buf.append("and ");
// 如果百位后的数不为0,则追加and

if (v != 0) // 前提是v不为0才作解析
if (v < 20 || v % 10 == 0) // 如果小于20或10的整数倍,直接取基本数词表的单词
buf.append(enNum[v]).append(" ");
else // 否则取10位数词,再取个位数词
buf.append(enNum[v - v % 10]).append(" ");
buf.append(enNum[v % 10]).append(" ");

if (i != count - 1) // 百位以上的组追加相应的单位
buf.append(enUnit[count - 1 - i]).append(" ");



return buf.toString().trim(); // 返回值

参考技术A 不行,int类型虽然能强转为String类型,但是你这个不符合规律了。
比如1能转为“1”
但是不能把1转为“one”
参考技术B 自己写程序,用
int i;
String english;
switch(i)
case 0:
english = zero;
break;
case 1:
english = one;
break;
参考技术C http://blog.csdn.net/connectionutils/article/details/6745724
这里实现了,这东西就是算法繁琐
参考技术D 当年做过这个考试题,代码挺多的

如何在Java中将字符从字母字符转换为十六进制数字?

【中文标题】如何在Java中将字符从字母字符转换为十六进制数字?【英文标题】:How to convert a char from an alphabetical character to a hexadecimal number in Java? 【发布时间】:2011-05-27 12:52:29 【问题描述】:

如何在 Java 中将字符从字母字符转换为十六进制数字?如果有人知道 Java 中的任何内置方法可以完成这项工作,或者如果您有自己的方法,您能帮忙吗?

另外,如何将十六进制转换为二进制?

【问题讨论】:

Performance question: Fastest way to convert hexadecimal char to its number value in Java? 的可能重复项 【参考方案1】:

您可以将字符转换为十六进制字符串。

char ch = 
String hex = String.format("%04x", (int) ch);

要读取十六进制并转换为二进制,您可以这样做

int num = Integer.parseInt(text, 16);
String bin = Integer.toString(num, 2);

【讨论】:

必须将 char 转换为 int,否则您将获得 IllegalFormatConversionException 很好看,我忘了它是自动装箱而不是向上投射。 这让我无法从 char[] 转换为 int @machado char [] 在哪里使用? for (i = 0; i 【参考方案2】:

你可以使用:

Integer.toHexString((int) 'a');
Integer.toBinaryString((int) 'b');

更新:十六进制->二进制转换:

Integer.toBinaryString(Integer.parseInt("fa", 16))

【讨论】:

【参考方案3】:

使用apache commons codec library

具体来说: http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html

【讨论】:

以上是关于java如何将数字转换为英文的主要内容,如果未能解决你的问题,请参考以下文章

如何使用java将字符串(1,234)转换为数字(1234)[关闭]

JAVA:如何将 txt 文件转换为带有 E 表示法数字的二维数组?

如何将数字转换为文本[重复]

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]

如何在Java中将字符从字母字符转换为十六进制数字?