中文数字转换笔试题
原题:把一个六位一下的阿拉伯数字转换成中文数字,阿拉伯数字不包含小数这个题以前自己也做过,费了九牛二虎的力气才做出来。这次打算凭记忆再写一遍,后来发现可能有更好的方法。作出题后,自己内心中一点点丑陋的小得意又冒出头来,为此自己还检讨了一下,就打算作罢了。
这样就能约束自己吗,很显然是不能,要突破。所以写出来,作为自己学习java编程的小小花絮的记忆。
(上面几句纯属自嘲,请勿拍砖)
import java.util.Scanner;
public class NumberConvert {
private static String[] zh = new String[] { "零", "壹", "贰", "叁", "肆", "伍",
"陆", "柒", "捌", "玖" };
private static String[] loc = new String[] { "", "十", "百", "仟", "万", "十",
"百", "仟" };
public static void main(String[] args) {
int num = getNumber();
if(num==-1){
return ;
}
String result = convert(num);
System.out.println(result);
}
private static String convert(int num) {
if (num == 0) {
return "零";
}
String result = new String();
boolean flag = false;
for (int i = String.valueOf(num).length(); i > 0; i--) {
int temp = (int) (num / (Math.pow(10, i - 1)) % 10);
if (temp == 0) {
flag = true;
continue;
} else {
if (flag) {
result += "零";
flag = false;
}
result += zh[temp];
result += loc[i - 1];
}
}
return result;
}
private static int getNumber() {
Scanner sc = new Scanner(System.in);
for (;;) {
String str = sc.next();
if (str.matches("^\\d+$")) {
return Integer.parseInt(str);
} else {
if ("exit".equals(str)) {
return -1;
}
System.out.println("用户输入不合规则,请重新输入:");
continue;
}
}
}
}
----------------解决方案--------------------------------------------------------
这么好的帖,为什么没有人顶?
顶上去
----------------解决方案--------------------------------------------------------
不过,继续努力!
----------------解决方案--------------------------------------------------------
程序代码:
import java.util.regex.*;
public class StringRegex{
//这个方法是把数字转换成人民币大写。可带小数
public String getr(double n){
String s=String.valueOf((int)n); //提取整数
int m1=(int)((n-(int) n)*1000);
int m2=((int)((n-(int) n)*100)) * 10;
if(m1>m2){m1+=1;} //如果小数有误差,改正(如。1.3是1.299999998)
String m=String.valueOf(m1/10); //提取小数。
String q[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String w[]={"","拾","佰","仟"};
String d[]={"分","角"};
String s1="";
for(int i=0,ii=s.length()-1;i<s.length();i++,ii--){
s1+=q[Integer.parseInt(s.substring(i,i+1))];
if(Integer.parseInt(s.substring(i,i+1))!=0){s1+=w[ii%4];}
if(ii==8){s1+="亿";}
if(ii==4){s1+="万";}
}
s1+="元";
s1=Pattern.compile("[零]{2,}").matcher(s1).replaceAll("零");
s1=Pattern.compile("[零]{1}([亿万元]{1})").matcher(s1).replaceAll("$1");
String s0="";
if(m1>0){
for(int i=m.length()-1,o=0;i>=0;i--,o++){
s0=q[Integer.parseInt(m.substring(i,i+1))]+d[o]+s0;
}
s0=Pattern.compile("零分").matcher(s0).replaceAll("");
if(m1<100){s0="零"+s0;}
}
return s1+s0;
}
}
public class StringRegex{
//这个方法是把数字转换成人民币大写。可带小数
public String getr(double n){
String s=String.valueOf((int)n); //提取整数
int m1=(int)((n-(int) n)*1000);
int m2=((int)((n-(int) n)*100)) * 10;
if(m1>m2){m1+=1;} //如果小数有误差,改正(如。1.3是1.299999998)
String m=String.valueOf(m1/10); //提取小数。
String q[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String w[]={"","拾","佰","仟"};
String d[]={"分","角"};
String s1="";
for(int i=0,ii=s.length()-1;i<s.length();i++,ii--){
s1+=q[Integer.parseInt(s.substring(i,i+1))];
if(Integer.parseInt(s.substring(i,i+1))!=0){s1+=w[ii%4];}
if(ii==8){s1+="亿";}
if(ii==4){s1+="万";}
}
s1+="元";
s1=Pattern.compile("[零]{2,}").matcher(s1).replaceAll("零");
s1=Pattern.compile("[零]{1}([亿万元]{1})").matcher(s1).replaceAll("$1");
String s0="";
if(m1>0){
for(int i=m.length()-1,o=0;i>=0;i--,o++){
s0=q[Integer.parseInt(m.substring(i,i+1))]+d[o]+s0;
}
s0=Pattern.compile("零分").matcher(s0).replaceAll("");
if(m1<100){s0="零"+s0;}
}
return s1+s0;
}
}
楼主的语文比我还差,十?拾
[ 本帖最后由 虾B写 于 2010-11-24 19:55 编辑 ]
----------------解决方案--------------------------------------------------------
getr是StringRegex类的一个方法,还有判断是否是数字,是否是日期,加密之类的。功能分开能反复调用。
----------------解决方案--------------------------------------------------------
看了受益啊,顶上去
----------------解决方案--------------------------------------------------------
我是来观望的,现在还不晓得主攻哪方面嘞。
----------------解决方案--------------------------------------------------------