📄 rmbchange.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class RMBChange extends JApplet
implements ActionListener
{
JLabel upperLabel,lowerLabel;
JTextField upperField,lowerField;
String ss=new String("零壹贰叁肆伍陆柒捌玖");//初始化数字的大写形式
int flag1=1;//用户输入的数字正确则为1,不正确则为零
String strr;
public void init()
{
Container container=getContentPane();
container.setLayout(new GridLayout(2,2,20,20));
lowerLabel=new JLabel("输入人民币金额");
container.add(lowerLabel);
lowerField=new JTextField(15);
lowerField.addActionListener(this);//监听数字输入形式
container.add(lowerField);
upperLabel=new JLabel("该金额的大写形式为");
container.add(upperLabel);
upperField=new JTextField(25);
upperField.setEditable(false);
container.add(upperField);
}
public void actionPerformed(ActionEvent actionEvent)
{
String str;
double input;
str=lowerField.getText();
try{input=Double.parseDouble(str);flag1=1;} //对输入形式进行判断,无异常则证明输入形式正确
catch(NumberFormatException arithmeticException)
{
JOptionPane.showMessageDialog(null,arithmeticException.toString(),
"Arithmetic Exception",JOptionPane.ERROR_MESSAGE);
lowerField.setText("");
flag1=0;
}
if(flag1==1) //输入的为double型数字
{
StringTokenizer tokens=new StringTokenizer(str,".");
int count=0;
count=tokens.countTokens();
if(count==1) //输入的数不带小数部分
{ strr="";
if(str.length()>12) //整数部分最多处理到万亿,超过则报错
{
JOptionPane.showMessageDialog(null,"超过可显示金额的最大面值\n请重新输入");
lowerField.setText("");
upperField.setText("");
}
else
{
int fflag=1;
for(int i=0;i<str.length()-1;i++)
if(str.charAt(i)!='0') fflag=0;
if(fflag==0) {ChangeRMB(str);strr=strr+"整";upperField.setText(strr);} //输入为非零
else {strr="零元整";upperField.setText(strr);} //输入为零
}
}
if(count==2) //输入的数字含小数部分
{
strr="";
if(str.length()>15) //小数部分只能少于等于两位
{
JOptionPane.showMessageDialog(null,"超过可显示金额的最大面值\n请重新输入");
lowerField.setText("");
upperField.setText("");
}
else {
int flag2=0,flag3=1;
while(tokens.hasMoreTokens()) //取小数点两边的部分
{
flag2++;
if(flag2==1) //对整数部分的处理
{
String str1=tokens.nextToken();
for(int i=0;i<str1.length();i++)
if(str1.charAt(i)!='0') flag3=0;
if(flag3==0) {ChangeRMB(str1);}
else {strr="";}
}
if(flag2==2) //对小数部分的处理
{
String a=strr;
int i,c=0;
String str2=tokens.nextToken();
for(i=0;i<str2.length();i++)
{
c++;
int k=str2.charAt(i)-48;
strr+=ss.charAt(k);
if(i==0) strr+="角";
if(i==1) strr+="分";
}
String st1=strr;
String st2;
if(c==2){ //含两位小数时候的处理
if(a.equals(""))
st2=st1.replaceAll("零角零分","零元整");
else
st2=st1.replaceAll("零角零分","整");
String st3=st2.replaceAll("零分","");
if(a.equals(""))
strr=st3.replaceAll("零角","");
else strr=st3.replaceAll("零角","零");}
if(c==1){//只有一位小数时候的处理
if(a.equals(""))
strr=st1.replaceAll("零角","零元整");
else strr=st1.replaceAll("零角","整");}
upperField.setText(strr);
}
}
}
}
}
}
public void ChangeRMB(String string) //对输入数字形式的人名币转换过程
{
StringBuffer buffer=new StringBuffer();
int i,j,f=1;
for(i=string.length()-1;i>=0;i--)
{
int k=string.charAt(string.length()-1-i)-48; //数字相应中文形式的转换
buffer.append(ss.charAt(k));
if((i+1)%4==0&&k!=0) buffer.append("千"); //单位的添加
if((i+1)%4==3&&k!=0) buffer.append("百");
if((i+1)%4==2&&k!=0) buffer.append("十");
if((i+1)/4==1&&(i+1)%4==1) buffer.append("万");
if((i+1)/4==2&&(i+1)%4==1) buffer.append("亿");
}
buffer.append("元");
String str3=new String(buffer); //下面为一些特殊情况的处理
String str4=str3.replaceAll("零零零零","零"); //将多个零连续的以一个零代替
String str5=str4.replaceAll("零零零","零");
String str6=str5.replaceAll("零零","零");
String str7=str6.replaceAll("零亿","亿"); //将输出中含有的零亿,零万,零元,分别以亿,万或元代替
String str8=str7.replaceAll("零万","万");
String str9=str8.replaceAll("零元","元");
String str10=str9.replaceAll("亿万","亿");
if(str10.startsWith("零万")) //以下为用户输入的数字前面含有一个或多个零的处理
strr=str10.substring(2,str10.length());
else if(str10.startsWith("万零"))
strr=str10.substring(2,str10.length());
else if(str10.startsWith("零亿"))
strr=str10.substring(2,str10.length());
else if(str10.startsWith("亿零"))
strr=str10.substring(2,str10.length());
else if(str10.startsWith("零"))
strr=str10.substring(1,str10.length());
else strr=str10;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -