/** */
/**
* 解这个题目的思路主要是:从后往前读入数据,依次替换即可
* 关键是处理很多0的情况
* 这里用到的是先替换在处理0的情况,如:壹仟零百零拾壹圆
* 先把零百,零拾等处理成零结果为:壹仟零零壹圆
* 在把多个零替换成一个零就可以了
*
* 具体程序如下
*/
import java.util. * ;
public class MoneyTest ... {
/** *//**
* 数字替换成字符汉字
*/
public static String getCh(Integer en)...{
HashMap map = new HashMap();
map.put(new Integer(1),"壹");
map.put(new Integer(2),"贰");
map.put(new Integer(3),"叁");
map.put(new Integer(4),"肆");
map.put(new Integer(5),"伍");
map.put(new Integer(6),"陆");
map.put(new Integer(7),"柒");
map.put(new Integer(8),"扒");
map.put(new Integer(9),"玖");
map.put(new Integer(0),"零");
return (String)map.get(en);
}
/** *//**
* 按照位数来生成字符串(不考虑零的情况)
* 如壹仟零零壹圆
*/
public static String getNumMon(int mark,Integer en)...{
if(mark == 1)...{
if(en.intValue() == 0)
return "";
else
return getCh(en);
}
if(mark == 2)...{
return getCh(en) + "拾";
}
if(mark == 3)...{
return getCh(en) + "百";
}
if(mark == 4)...{
return getCh(en) + "仟";
}
if(mark == 5)...{
return getCh(en) + "万";
}
if(mark == 6)...{
return getCh(en) + "拾";
}
if(mark == 7)...{
return getCh(en) + "百";
}
if(mark == 8)...{
return getCh(en) + "仟";
}
if(mark == 9)...{
return getCh(en) + "亿";
}
if(mark == 10)...{
return getCh(en) + "拾";
}
if(mark == 11)...{
return getCh(en) + "百";
}
if(mark == 12)...{
return getCh(en) + "仟";
}
return "";
}
/** *//**
* 处理为零的情况
*/
public static String nonRep(String out)...{
int mark = -1;
//System.out.println("零仟".replaceAll("零","仟"));
out = out.replaceAll("零仟","零");
out = out.replaceAll("零百","零");
out = out.replaceAll("零拾","零");
//System.out.println(out);
for(int i=0;i<out.length();i++)...{
String sub = out.substring(i,i+1);
if(sub.equals("零"))...{
if(i - mark == 1)...{
out = out.substring(0,mark+1) + out.substring(i+1,out.length());
i = mark;
}else...{
mark = i;
}
}
}
out = out.replaceAll("零万","万");
out = out.replaceAll("零亿","亿");
/**//*String output = "";
for(int i=0;i<out.length();i++){
String sub = out.substring(i,i+1);
String sub3 ="";
if(i + 2 < out.length())
sub3 = out.substring(i+1,i+2);
if(sub.equals("零") && (!sub3.equals("万") || !sub3.equals("亿"))){
if(i - mark == 2 || i - mark == 1){
out = out.substring(0,mark+1) + out.substring(i+2,out.length());
i = mark;
}else{
mark = i;
}
}
}
for(int i=0;i<out.length();i++){
String sub1 = out.substring(i,i+1);
String sub2 = "";
if(i + 2 < out.length()){
sub2 = out.substring(i+1,i+2);
}
if(sub1.equals("零")&&(sub2.equals("仟") || sub2.equals("百") || sub2.equals("拾"))){
out = out.substring(0,i+1)+out.substring(i+2,out.length());
//System.out.println(out);
i = i - 1;
}
}
*/
return out;
}
/** *//**
* 测试函数
*/
public static void main(String[] args)...{
if(args.length < 1)...{
System.out.println("please input the money");
return;
}
if(args[0].length() > 12)...{
System.out.println("输入数字字符串的个数不能大于12位");
return;
}
try...{
Float.parseFloat(args[0]);
}catch(Exception e)...{
System.out.println("输入字符串的格式不对");
return;
}
String mon = args[0];
int mark = 0;
String out = "圆";
for(int i= mon.length() -1 ;i >=0;i--)...{
Integer en = new Integer(Integer.parseInt(mon.substring(i,i+1)));
mark = mark + 1;
out = getNumMon(mark,en)+out;
}
//System.out.println(out);
out = nonRep(out);
if((out.substring(out.length()-2,out.length()-1)).equals("零"))...{
out = out.substring(0,out.length()-2) + out.substring(out.length()-1,out.length());
}
System.out.println(out);
//System.out.println(nonRep(out));
/**//*System.out.println(nonRep("壹仟零零贰"));
System.out.println(numtochinese(mon));*/
}
* 解这个题目的思路主要是:从后往前读入数据,依次替换即可
* 关键是处理很多0的情况
* 这里用到的是先替换在处理0的情况,如:壹仟零百零拾壹圆
* 先把零百,零拾等处理成零结果为:壹仟零零壹圆
* 在把多个零替换成一个零就可以了
*
* 具体程序如下
*/
import java.util. * ;
public class MoneyTest ... {
/** *//**
* 数字替换成字符汉字
*/
public static String getCh(Integer en)...{
HashMap map = new HashMap();
map.put(new Integer(1),"壹");
map.put(new Integer(2),"贰");
map.put(new Integer(3),"叁");
map.put(new Integer(4),"肆");
map.put(new Integer(5),"伍");
map.put(new Integer(6),"陆");
map.put(new Integer(7),"柒");
map.put(new Integer(8),"扒");
map.put(new Integer(9),"玖");
map.put(new Integer(0),"零");
return (String)map.get(en);
}
/** *//**
* 按照位数来生成字符串(不考虑零的情况)
* 如壹仟零零壹圆
*/
public static String getNumMon(int mark,Integer en)...{
if(mark == 1)...{
if(en.intValue() == 0)
return "";
else
return getCh(en);
}
if(mark == 2)...{
return getCh(en) + "拾";
}
if(mark == 3)...{
return getCh(en) + "百";
}
if(mark == 4)...{
return getCh(en) + "仟";
}
if(mark == 5)...{
return getCh(en) + "万";
}
if(mark == 6)...{
return getCh(en) + "拾";
}
if(mark == 7)...{
return getCh(en) + "百";
}
if(mark == 8)...{
return getCh(en) + "仟";
}
if(mark == 9)...{
return getCh(en) + "亿";
}
if(mark == 10)...{
return getCh(en) + "拾";
}
if(mark == 11)...{
return getCh(en) + "百";
}
if(mark == 12)...{
return getCh(en) + "仟";
}
return "";
}
/** *//**
* 处理为零的情况
*/
public static String nonRep(String out)...{
int mark = -1;
//System.out.println("零仟".replaceAll("零","仟"));
out = out.replaceAll("零仟","零");
out = out.replaceAll("零百","零");
out = out.replaceAll("零拾","零");
//System.out.println(out);
for(int i=0;i<out.length();i++)...{
String sub = out.substring(i,i+1);
if(sub.equals("零"))...{
if(i - mark == 1)...{
out = out.substring(0,mark+1) + out.substring(i+1,out.length());
i = mark;
}else...{
mark = i;
}
}
}
out = out.replaceAll("零万","万");
out = out.replaceAll("零亿","亿");
/**//*String output = "";
for(int i=0;i<out.length();i++){
String sub = out.substring(i,i+1);
String sub3 ="";
if(i + 2 < out.length())
sub3 = out.substring(i+1,i+2);
if(sub.equals("零") && (!sub3.equals("万") || !sub3.equals("亿"))){
if(i - mark == 2 || i - mark == 1){
out = out.substring(0,mark+1) + out.substring(i+2,out.length());
i = mark;
}else{
mark = i;
}
}
}
for(int i=0;i<out.length();i++){
String sub1 = out.substring(i,i+1);
String sub2 = "";
if(i + 2 < out.length()){
sub2 = out.substring(i+1,i+2);
}
if(sub1.equals("零")&&(sub2.equals("仟") || sub2.equals("百") || sub2.equals("拾"))){
out = out.substring(0,i+1)+out.substring(i+2,out.length());
//System.out.println(out);
i = i - 1;
}
}
*/
return out;
}
/** *//**
* 测试函数
*/
public static void main(String[] args)...{
if(args.length < 1)...{
System.out.println("please input the money");
return;
}
if(args[0].length() > 12)...{
System.out.println("输入数字字符串的个数不能大于12位");
return;
}
try...{
Float.parseFloat(args[0]);
}catch(Exception e)...{
System.out.println("输入字符串的格式不对");
return;
}
String mon = args[0];
int mark = 0;
String out = "圆";
for(int i= mon.length() -1 ;i >=0;i--)...{
Integer en = new Integer(Integer.parseInt(mon.substring(i,i+1)));
mark = mark + 1;
out = getNumMon(mark,en)+out;
}
//System.out.println(out);
out = nonRep(out);
if((out.substring(out.length()-2,out.length()-1)).equals("零"))...{
out = out.substring(0,out.length()-2) + out.substring(out.length()-1,out.length());
}
System.out.println(out);
//System.out.println(nonRep(out));
/**//*System.out.println(nonRep("壹仟零零贰"));
System.out.println(numtochinese(mon));*/
}