运行界面:
/* *文件名:ChangeType.java * * * *题目:数字转中文 *说明: *1。有两个编辑框,一个用于输入阿拉伯数字,一个用于输出中文字符串,一个按钮。 *2。阿拉伯数字可包括小数,整数部分不超过13位,小数部分不超过4位。 * 1205404.36---转换为---壹佰二拾万五仟肆佰零肆点叁陆 * *编程思路: *编制两个编辑框,和一个按钮 *在文本框内输入数字,捕捉键盘输入,将键盘输入:数字,小数点,
*已经退格键和非法输入区别开。 *将键盘的输入传送给String型的result_1。 *对result_1进行分解,分解成整数和小数。 *整数要分成几个单位:个位到千位,万位到千万位,亿位到万亿位 *分别传入转化成中文的函数ChangeChinese(),进行转化。 *之后在第二个文本框中显示。 * *注意的地方: *输入零的问题:1)零在中间,两个以上的零,只能显示一个零 2)零在末尾,不能显示零。 *待改进的地方 *用鼠标在中间位置插入数字不能正确计算 *用鼠标进行剪贴,粘贴,复制则不能正确计算 */ import java.awt.* ; import java.awt.event.* ; public class ChangeType { private Frame f1 ; private Button b1 ; private TextField t1,t2 ; private int dot_1,length_1 ; private String result_1; public ChangeType() { f1 = new Frame("数字转中文 ") ; b1 = new Button("转换") ; t1 = new TextField("",40) ; t2 = new TextField("",40) ; } public void launch( ) //实现窗口 { f1.add(t1,BorderLayout.NORTH); f1.add(b1,BorderLayout.CENTER); f1.add(t2,BorderLayout.SOUTH) ; f1.setSize(450,100 ) ; f1.setVisible(true); f1.addWindowListener(new WindowAdapter() //匿名类实现出口关闭功能 ; { public void windowClosing(WindowEvent e) { System.exit(0); } } ); b1.addActionListener(new Handle()) ; //注册button按钮 t1.addKeyListener( new NewHandler()) ; //注册textfiled按钮 t2.addKeyListener( new NewHandler1()) ; //注册textfiled按钮 } private class Handle implements ActionListener { private int zhengshu_1,xiaoshu_1 ; private String result_2 ; private boolean zero_null_1 = true ; private boolean bo1= true ; public void actionPerformed(ActionEvent e) { if(result_1==null) //如果没有输入任何数字,则提示输入 {t2.setText("请输入数字");} else { if(dot_1==0) //若输入数字中没有小数 { zhengshu_1 = result_1.length() ; ChangeInteger(zhengshu_1) ; } else //若输入的数字中有小数 { zhengshu_1 = dot_1-1 ; ChangeInteger(zhengshu_1) ; xiaoshu_1 = dot_1-1 ; ChangeXiaoshu(xiaoshu_1) ; } t2.setText(result_2) ; } } public void ChangeInteger(int a) { String temp_s1 ; int temp_1 = 0 ; bo1 = true ; result_2 = "" ; if(a==13) //若为十三位整数,即到万亿 { result_2 = ChangeChinese(result_1.substring(0,5)) + "亿" ; if(ChangeChinese(result_1.substring(5,9))!=null) //第5,9位输入不全是零 result_2 =result_2+ChangeChinese(result_1.substring(5,9)) +"万" ; else {} if(ChangeChinese(result_1.substring(9,13))!=null) //第9,13位输入不全是零 result_2 =result_2+ChangeChinese(result_1.substring(9,13)) ; else {} } else //小于十三位整数,即小于万亿 { for( int i = 0 ; i < 3 ; i ++ ) { if ((a-4) <= 0 ) { temp_1 ++ ; temp_s1 = ChangeChinese(result_1.substring(0,a)) ; if(zero_null_1) //如果返回值不等于null { if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;} else if(temp_1==3) {result_2 =temp_s1+"亿"+result_2 ;} else { result_2 =temp_s1 ; } break ; } else{} } else { temp_1 ++ ; temp_s1 = ChangeChinese(result_1.substring(a-4,a)) ; if( zero_null_1) //如果返回值不等于null { if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;} else if(temp_1==3) {result_2 = temp_s1+"亿"+result_2 ;} else { result_2 = temp_s1; } } else{} } a = a - 4 ; } } } public void ChangeXiaoshu (int a ) { bo1 = false ; result_2 = result_2 + ChangeChinese(result_1.substring(a,result_1.length())) ; } public String ChangeChinese(String st1) { int ai1 = st1.length() ; int ai2 = 0 ; int ai3 = 0 ; String st2 = null ; String st3 = null ; for(int i = ai1-1 ; i>=0 ; i--) { char c1 = st1.charAt(i) ; switch(c1) { case'1': st2 = "壹" ; break ; case'2': st2 = "贰" ; break ; case'3': st2 = "叁" ; break ; case'4': st2 = "肆" ; break ; case'5': st2 = "伍" ; break ; case'6': st2 = "陆" ; break ; case'7': st2 = "柒" ; break ; case'8': st2 = "捌" ; break ; case'9': st2 = "玖" ; break ; case'0': st2 = "零" ; break ; case'.' : st2 = "点"; break ; } if(bo1) //解决整数部分输入为两个零,或者末尾为零的情况 { if(ai2==0&&st2=="零") { st2 = null ;ai3++;} else if(ai2==0&&st2!="零") st2 = st2 ; else if(ai2==1&&st2!="零")st2 = st2 +"拾" ; else if(ai2==2&&st2!="零")st2 = st2 +"佰"; else if(ai2==3&&st2!="零")st2 = st2 +"仟"; else if(ai2==4&&st2!="零")st2 = st2 +"万"; else {ai3++;if(ai3>1){st2 = null;}else{st2 = st2 ;}} ai2++ ; if (st2==null) {st3 = st3 ;} else if(st3 == null) {st3 = st2 ;} else {st3 = st2+ st3 ; } } else //小数部分 { if (st3==null){st3 = st2 ;} else {st3 = st2+ st3; } } } if(st3==null){zero_null_1 = false;} else{zero_null_1 = true;} return st3 ; } } private class NewHandler extends KeyAdapter { private int test1; private int test2 = 13 ; public void keyPressed(KeyEvent e) { char c1 = e.getKeyChar( ); if( Character.isDigit(c1)||c1=='.') //排除错误输入问题,只接受数字和小数点 { if(c1=='.') //输入的为小数点 { test1++ ; if(test1> 1) //仅准许有一个小数点 { e.consume() ; } else { length_1++; test2 = length_1+4; dot_1 = result_1.length()+1 ; } } else //输入的不是小数点 { length_1++; } if(length_1>test2) //限定整数部分不超过13位,小数部分不超过4位 { e.consume() ; length_1-- ; } else { if(length_1==1) {result_1=String.valueOf(c1);} else { result_1 = result_1 + c1;} } } else { if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE) //退格键 { try //退没了,会抛出exception { if(result_1.charAt(result_1.length()-1)=='.') { result_1=result_1.substring(0,result_1.length()-1); length_1--; dot_1 = 0 ; test1--; test2 = 13 ; } else { result_1=result_1.substring(0,result_1.length()-1); length_1--; } }catch(RuntimeException ex){result_1 = null ; } } else{e.consume();} } } } private class NewHandler1 extends KeyAdapter { public void keyPressed(KeyEvent e) {e.consume( );} } public static void main(String args[ ]){ ChangeType changetype1 = new ChangeType( ) ; changetype1.launch( ) ; } }