今天同学让看下这个题目,折腾了两个多小时,设计了个巨复杂的算法,漏洞百出。
回来的路上忽然想起来其实很简单啊,贴一下代码。
感叹一下,以后什么都要想好了再动手,那怕什么都不做,光思考了一大半时间,很多时候也比没想清楚急匆匆得开始干好得多。
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开发中,有时我们需要将阿拉伯数字(1, 2, 3等)转换为中文的传统读法(如“一”,“二”,“三”)。这个任务涉及到字符串处理、数字转换以及对中文字符的理解。在本文中,我们将深入探讨...
在编程领域,尤其是在Java开发中,有时我们需要将数字转换成中文读法,以便于用户更加直观地理解数据。这个需求通常出现在财务、报表或者人机交互界面等场景。标题所提及的问题是:“Java设计输入‘12345’显示‘一...
在本文中,我们将深入探讨如何使用C#编程语言创建一个窗体应用程序,该程序能够将输入的阿拉伯数字转换为中文大写。这个功能在财务报表、发票和其他需要以中文大写表示金额的场合非常有用。 首先,我们看到程序的...
这个“把数学数字转换为人民币读法”的问题就是一个很好的设计思想的例子,它涉及到自然语言处理、字符串操作以及数字与文本之间的转换。我们将探讨如何使用C#来实现这个功能。 首先,人民币的读法有一定的规则,如...
阿拉伯数字金额转换成汉字金额,比如1000.00 转换成 壹仟元。
汉语拼音读法.pdf
根据给定的信息,本文将详细解释一个VB程序,该程序的主要功能是将用户输入的阿拉伯数字转换为对应的中文表示。程序包含几个关键部分:表单设计、事件处理以及核心转换函数。 ### 表单设计 #### Form设计 程序界面...
在这个阿拉伯数字到中文数字转换的例子中,我们利用这种模式构建了一个解析系统,它能够理解数字的读法规则,并将其转化为符合中文习惯的表达方式。通过学习和实践这个范例,开发者可以加深对解析器模式的理解,并将...
"汉语拼音字母表的读法亟待改革" 汉语拼音字母表的读法亟待改革,这是一个亟待解决的问题。在小学二年级时,我们就开始学习《汉语拼音字母表》,但是这种读法却不容易让人读懂。《汉语拼音方案》规定了《汉语拼音...
拼读是学习汉语的基础,通过反复的练习,孩子们可以熟悉并掌握汉语拼音的发音规则,为日后的听说读写打下坚实基础。 在【部分内容】中,我们可以看到不同难度的拼读练习,涵盖了声母、韵母以及音节的组合。这些练习...
本资源是关于汉语拼音学习的完全指南,涵盖了拼音读法、写法、变调规律、ü 的规律、隔音符号、汉语拼音大写、轻声的读法、儿化音等方面的内容。 2.1 拼音读法 汉语拼音学习大全中,介绍了两种拼音读法:两拼法...
汉语拼音是中国小学生学习语文的基础工具,它是一种帮助学习汉字发音的音标体系,对于初学者来说,掌握汉语拼音的正确发音和书写规则至关重要。这份文档详细介绍了汉语拼音的声母、韵母以及整体认读音节,并且列举了...
在IT领域,尤其是在编程实践中,将浮点数转换为人民币读法是一项常见的需求。这涉及到数值处理、格式化以及本地化等技术。《疯狂Java讲义》是一本深入讲解Java编程的经典教材,其中涵盖了许多实战性的编程问题。在这...
读法和练习.doc》文档为学习者提供了一个宝贵的学习资源,它有助于学习者构建起正确的汉语拼音学习观念,并通过不断的实践提高汉语口语和书面语的运用能力。通过掌握汉语拼音,学习者可以更深入地了解中华文化,为...
汉语拼音的读法及顺序表,有文字注释的。一学就会
这个数据集包含了160个不同的汉语拼音发音,涵盖了汉语普通话的基本音素,为学习者提供了丰富的发音样本,同时也为语音技术的研究者提供了宝贵的基础材料。 在中文语言中,拼音是汉字的音译工具,它将每个汉字用...
在IT行业中,尤其是在软件开发领域,经常会遇到将数字金额转换为汉字表示的需求,这在财务系统、报表或者用户界面中尤为常见。这个需求涉及到的是数字处理和字符串操作的知识点,通常可以通过编程语言来实现。本例中...
汉语拼音是现代汉语的标准注音系统,它为汉字提供了一种表音的方法,便于识字、学习和普通话的推广。汉语拼音字母表包括声母、韵母和整体认读音节三部分,是学习汉语拼音的基础。 声母部分包括:b、p、m、f、d、t、...
一年级语文:26个汉语拼音字母表读法及学习要点!教学提纲.pdf
汉语拼音字母表读法规则.doc