今天同学让看下这个题目,折腾了两个多小时,设计了个巨复杂的算法,漏洞百出。
回来的路上忽然想起来其实很简单啊,贴一下代码。
感叹一下,以后什么都要想好了再动手,那怕什么都不做,光思考了一大半时间,很多时候也比没想清楚急匆匆得开始干好得多。
import java.util.regex.Pattern;
public class num2pinyin {
public static String numArray[] = {"Ling","Yi","Er","San","Si","Wu","Liu","Qi","Ba","Jiu"};
//int范围到十亿就足够了
public static String pinyinArray[] = {"","Shi","Bai","Qian","Wan","ShiWan","BaiWan","QianWan","Yii","ShiYii"};
public static String Num2pinyin(int input)
{
StringBuilder sb = new StringBuilder();
char[] nums = String.valueOf(input).toCharArray();
for(int i=0;i<nums.length;i++)
{
int currentNum = nums[i] - '0';
sb.append(numArray[currentNum]);
if(currentNum!=0)
sb.append(pinyinArray[nums.length-1-i]);
}
String rst = sb.toString();
//多个0替换成1个
rst = rst.replaceAll("Ling(Ling)+", "Ling");
//开头的“一十”换成“十”
if(rst.startsWith("YiShi"))
rst = rst.substring(2);
//去掉末尾0
if(rst.length()>4 && rst.endsWith("Ling"))
rst = rst.substring(0, rst.length()-4);
//出现多个亿的话只保留最后一个
rst = remainLast(rst,"Yii");
//亿后面再出现多个万的话只保留最后一个万
rst = remainLast(rst,"Wan");
return rst;
}
//str 中删掉所有content,只保留最后一个
public static String remainLast(String str,String content)
{
while(str.indexOf(content)!=str.lastIndexOf(content))
str=str.replaceFirst(Pattern.quote(content), "");
return str;
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(Num2pinyin(0));
System.out.println(Num2pinyin(1));
System.out.println(Num2pinyin(9));
System.out.println(Num2pinyin(15));
System.out.println(Num2pinyin(100));
System.out.println(Num2pinyin(105));
System.out.println(Num2pinyin(115));
System.out.println(Num2pinyin(1001));
System.out.println(Num2pinyin(2000));
System.out.println(Num2pinyin(2100));
System.out.println(Num2pinyin(2010));
System.out.println(Num2pinyin(9999));
System.out.println(Num2pinyin(10000));
System.out.println(Num2pinyin(10001));
System.out.println(Num2pinyin(10010));
System.out.println(Num2pinyin(10100));
System.out.println(Num2pinyin(21000));
System.out.println(Num2pinyin(99999));
System.out.println(Num2pinyin(100000));
System.out.println(Num2pinyin(890909));
System.out.println(Num2pinyin(2200000));
System.out.println(Num2pinyin(2100000000));
}
}
分享到:
相关推荐
阿拉伯数字转换成中文传统读法
Java设计输入“12345”显示“一万两千三百四十五” 输入“1000”显示“一千”
阿拉伯数字金额转换成汉字金额,比如1000.00 转换成 壹仟元。
汉语拼音读法.pdf
例如"123456"转换为"壹拾贰萬叁仟肆佰伍拾陆
一年级语文:26个汉语拼音字母表读法及学习要点!教学提纲[001].pdf
精彩编程与编程技巧-将阿拉伯数字转成中文字的程式 ...
汉语拼音的读法及顺序表,有文字注释的。一学就会
中文拼音发音语音数据集160个 可以使用此进行中文语音合成 可以研究模拟人类发生 可以学习发声
一年级语文:26个汉语拼音字母表读法及学习要点!教学提纲.pdf
汉语拼音字母表读法规则.doc
新手自己用C语言编的一个读整数问题程序,输入一个0到1亿阿拉伯数字,显示对应汉语拼音读法。分享一下,希望大家批评指正
题目:输入一串数字,转成人民币读法输出 例: 输入:12345678.908 输出:壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元玖角零捌厘 实现该功能要解决如下几个问题: 1、输入有效性检查 2、数字转中文 3、零的特殊处理 关于零...
数字金额转汉字读法,简单方便易懂,个性化的读法还需自己写判断去区分
汉语拼音字母表的读法亟待改革.pdf
一年级语文汉语拼音字母表及读法.pdf
26汉语拼音字母表.读法和练习.doc
一年级汉语拼音字母表含读法和儿歌.pdf
包括拼音,简繁转换,数字读法,货币读法。 安装 通过Nuget使用.NET CLI安装: dotnet add package Chinese 版本更新 v0.3.5 : 可移除对Microsoft Visual Studio International Pack 1.0 Service的依赖; 拼音解析...
自然拼读法归纳(可打印).pdf