📄 changetype.java
字号:
/*
*文件名: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( ) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -