String num = "零壹贰叁肆伍陆柒捌玖"; String dw = "圆拾佰仟万亿"; String m = "30020.23"; String mm[] = null; mm = m.split("\\."); String money = mm[0]; String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" + num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分"; for (int i = 0; i < money.length(); i++) { String str = ""; int n = Integer.parseInt(money.substring(money.length() - i - 1, money.length() - i)); str = str + num.charAt(n); if (i == 0) { str = str + dw.charAt(i); } else if ( (i + 4) % 8 == 0) { str = str + dw.charAt(4); } else if (i % 8 == 0) { str = str + dw.charAt(5); } else { str = str + dw.charAt(i % 4); } result = str + result; } result = result.replaceAll("零([^圆]{1})", "零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零圆", "圆"); System.out.println(result);
第一我是一楼 第二这是我以前写的代码 你的要求比我的简单,所以看明白我的思路,写你那个就更容易了,只需要把小数位去掉,把"圆"字去掉,然后把先面的变一下就OK了 String num = "零壹贰叁肆伍陆柒捌玖"; String dw = "圆拾佰仟万亿"; String num = "一二三四五六七八九"; String dw = "十百千万亿";写代码要去学别人的思路思想,而不是看结果!要学会举一反三!
lip009(深蓝忧郁) ( ) 信誉:100 Blog 说的好,善于学习!
我的写法 混乱了些 public static String integerToChineseString(int valueIn) { char[] v = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; char[] d = new char[] { ' ', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾' }; char n = '负'; if (valueIn == 0) { return String.valueOf(v[0]); } long value = valueIn; String str = ""; if (value < 0) { str += n; value = Math.abs(value); } for (int i = (int)Math.log10(value); i >= 0; i--) { int val = (int)(value % Math.pow(10, i + 1) / Math.pow(10, i)); if (val == 0 && i != 0 && ((int)(value % Math.pow(10, i) / Math.pow(10, i - 1))) == 0 && i % 4 != 0) { continue; } str += (((val == 0 && i % 4 == 0) || (i == (int)Math.log10(value) && val == 1 && i % 4 == 1)) ? "" : v[val]) + "" + ((val == 0 && i % 4 != 0) || (i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10, i))) == 0)) ? "" : d[i]) + ((i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10, i))) == 0)) ? String.valueOf(v[0]) : ""); } return str.trim(); }
深蓝兄的几个replaceAll()和正则表达式用的漂亮 :)
突然发现替换有点问题,改下: result = result.replaceAll("零([^亿圆])", "零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零[亿圆]", "$1");
汗自己一个,又漏掉东西了: result = result.replaceAll("零([^亿圆])", "零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零([亿圆])", "$1");
我的那段修改了一下 str += (((val == 0 && i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10, i))) != 0)) || (i == (int)Math.log10(value) && val == 1 && i % 4 == 1)) ? "" : v[val]) + "" + ((val == 0 && i % 4 != 0) || (i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10, i))) == 0)) ? "" : d[i]); 深蓝兄 我用1000000020.23测试你的方法 还是有点问题的
to:alabaza(在我带他去面试之前,我给他的代码补上注释。因为写注) ( ) 信誉:100 Blog 在上面已经给出正确的了,往上看看: result = result.replaceAll("零([^亿圆])", "零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零([亿圆])", "$1");
to: lip009(深蓝忧郁) 拾亿零贰佰万壹仟零贰拾 壹拾亿零贰佰零壹仟零贰拾圆贰角叁分少了个万字啊 :)
for (int i = 0; i < money.length(); i++) { String str = ""; int n = Integer.parseInt(money.substring(money.length() - i - 1,money.length() - i)); str = str + num.charAt(n); if (i == 0) { str = str + dw.charAt(i); } else if ( (i + 4) % 8 == 0) { str = str + dw.charAt(4); } else if (i % 8 == 0) { str = str + dw.charAt(5); } else { str = str + dw.charAt(i % 4); } result = str + result; } result = result.replaceAll("零([^圆]{1})", "零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零圆", "圆"); return result; }
还有BUG,再改下: String num = "零壹贰叁肆伍陆柒捌玖"; String dw = "圆拾佰仟万亿"; String m = "30020.23"; String mm[] = null; mm = m.split("\\."); String money = mm[0]; String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" + num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分"; for (int i = 0; i < money.length(); i++) { String str = ""; int n = Integer.parseInt(money.substring(money.length() - i - 1, money.length() - i)); str = str + num.charAt(n); if (i == 0) { str = str + dw.charAt(i); } else if ( (i + 4) % 8 == 0) { str = str + dw.charAt(4); } else if (i % 8 == 0) { str = str + dw.charAt(5); } else { str = str + dw.charAt(i % 4); } result = str + result; } result = result.replaceAll("零([^亿万圆])", "零"); result = result.replaceAll("亿零+万","亿零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零([亿万圆])", "$1"); result =result.replaceAll("^壹拾","拾"); System.out.println(result);
再改替换: result = result.replaceAll("零([^亿万圆角分])", "零"); result = result.replaceAll("亿零+万","亿零"); result = result.replaceAll("零+", "零"); result = result.replaceAll("零([亿万圆])", "$1"); result =result.replaceAll("壹拾","拾");
我觉得这样更好,简单明了。(小数点没算,题目上没有说是钱啊) String[] num = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; String[] unit = new String[]{"","拾","佰","仟","万","拾万","佰万","仟万","亿","拾亿","佰亿","仟亿"}; String src = "1000300020"; String desc = ""; // 转换数字 int len = src.length(); String[] descc = new String[len]; for (int i=0; i<len; i++) { descc[i] = num[src.charAt(i) - '0']; System.out.println(descc[i]); } // 中间结果串 for (int i=0; i<len; i++) { desc += descc[i]; if (!(descc[i].equals("零"))) { desc += unit[len-1-i]; } } // 去掉多余的”零“ desc = desc.replaceAll("零+", "零"); desc = desc.replaceAll("^零+", ""); desc = desc.replaceAll("零+$", ""); System.out.println(desc);
多了一行 System.out.println(descc[i]); 可以去掉的
我是初学者 我用String类写了个程序 是依次读入数字并转换成汉语数字 然后再按位数插入单位 由于方法比较笨所以只实现了千位以内的 之后的代码会翻番所以不写了 这个方法好读不好写 很好理解 因为考虑零比如0000 0203 1008 0002等数的汉语正确语法显示所以代码很长 希望有同是初学的朋友交流共同进步 程序: ///////////////////////////////////////////Numbers.java/////////////////////////////////////////// import java.io.*; public class Numbers { public static void main(String [] args) { int ch =0; String zero = new String("零"); String S="",S1="",S2="",S3="",S4="",S5="",S6="",S7="",S8="",S9="",S0="";//个十百千万...... System.out.println("请输入数字:[输入字母即可退出]");
System.out.println(S); //输出结果 S=""; break; ////////////////////////////////////////////////////////////////////////////////////// default: switch(ch) //进行转换大写汉字 { case '1': S=S+"一";break; case '2': S=S+"二";break; case '3': S=S+"三";break; case '4': S=S+"四";break; case '5': S=S+"五";break; case '6': S=S+"六";break; case '7': S=S+"七";break; case '8': S=S+"八";break; case '9': S=S+"九";break; case '0': S=S+"零";break; default: System.out.println("你输入的不是纯数字"); return; }
public void diffract(int i){ switch(i){ case 1:print("一");break; case 2:print("二");break; case 3:print("三");break; case 4:print("四");break; case 5:print("五");break; case 6:print("六");break; case 7:print("七");break; case 8:print("八");break; case 9:print("九");break; case 0:print("零");break; } }
public void unit(int i){ //打印单位 switch(i){ case 1:break; case 2:print("十");break; case 3:print("百");break; case 4:print("千");break; case 5:print("万");break; case 6:print("十万");break; case 7:print("百万");break; } }
public void print(String unit){ System.out.print(unit); } }
看我的 最大16位的正整数肯定正确!!!main函数参数读入的.. public class ITCS { public static void main(String[] args) {
//输出结果字符串,如遇非法字符串则输出"零圆" public String toString() { char[][] temp = split(); for ( int a = 0; a < temp.length; a++ ) { moneyStr.append(toTurnString(temp[a], temp.length-a)); }
if ( !decimalStr.equals("0") ) { moneyStr.append(toTurnString(decimalStr.substring(0).toCharArray(), 0)); }
//输出每一组的对应表示 private String toTurnString(char[] number, int i) { StringBuffer temp = new StringBuffer(""); boolean isZero = false; int zeroLen = 0; for ( int a = 0; a < number.length; a++ ) { if ( number[a] == '0' ) { zeroLen++; isZero = true; } else { isZero = false; }
if ( !isZero ) { if ( zeroLen != 0 ) { temp.append(num[0]); zeroLen = 0; }
temp.append(toTurnNum(number[a])).append(toTurnUnit(number.length-a, i)); } else { if ( a == number.length-1 ) { temp.append(toTurnUnit(number.length-a, i)); } } }
return temp.toString(); }
private char toTurnUnit(int len , int unit) { switch ( len ) { case 1: return units[unit]; case 2: return '拾'; case 3: return '佰'; case 4: return '仟'; } return '0'; }
//将金额字符串的整数部分以四位为一组进行分割 private char[][] split() { int lenTmp = integerStr.length(); int strArrayLength = lenTmp/4+((lenTmp-lenTmp/4*4)>0 ? 1 : 0 ); char[][] temp = new char[strArrayLength][];
for ( int a = temp.length-1; a >= 0; a-- ) { if ( a == 0 ) { temp[a] = integerStr.substring(0, lenTmp).toCharArray();
String dw = "圆拾佰仟万亿";
String m = "30020.23";
String mm[] = null;
mm = m.split("\\.");
String money = mm[0]; String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" +
num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分"; for (int i = 0; i < money.length(); i++) {
String str = "";
int n = Integer.parseInt(money.substring(money.length() - i - 1,
money.length() - i));
str = str + num.charAt(n);
if (i == 0) {
str = str + dw.charAt(i);
}
else if ( (i + 4) % 8 == 0) {
str = str + dw.charAt(4);
}
else if (i % 8 == 0) {
str = str + dw.charAt(5);
}
else {
str = str + dw.charAt(i % 4);
}
result = str + result;
}
result = result.replaceAll("零([^圆]{1})", "零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零圆", "圆");
System.out.println(result);
第二这是我以前写的代码
你的要求比我的简单,所以看明白我的思路,写你那个就更容易了,只需要把小数位去掉,把"圆"字去掉,然后把先面的变一下就OK了
String num = "零壹贰叁肆伍陆柒捌玖";
String dw = "圆拾佰仟万亿"; String num = "一二三四五六七八九";
String dw = "十百千万亿";写代码要去学别人的思路思想,而不是看结果!要学会举一反三!
说的好,善于学习!
{
char[] v = new char[] { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
char[] d = new char[] { ' ', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾' };
char n = '负';
if (valueIn == 0)
{
return String.valueOf(v[0]);
}
long value = valueIn;
String str = "";
if (value < 0)
{
str += n;
value = Math.abs(value);
}
for (int i = (int)Math.log10(value); i >= 0; i--)
{
int val = (int)(value % Math.pow(10, i + 1) / Math.pow(10, i));
if (val == 0 && i != 0 && ((int)(value % Math.pow(10, i) / Math.pow(10, i - 1))) == 0
&& i % 4 != 0)
{
continue;
}
str += (((val == 0 && i % 4 == 0) || (i == (int)Math.log10(value) && val == 1 && i % 4 == 1)) ? ""
: v[val])
+ ""
+ ((val == 0 && i % 4 != 0)
|| (i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10, i))) == 0)) ? ""
: d[i])
+ ((i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10, i))) == 0)) ? String.valueOf(v[0])
: "");
}
return str.trim();
}
result = result.replaceAll("零([^亿圆])", "零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零[亿圆]", "$1");
result = result.replaceAll("零([^亿圆])", "零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零([亿圆])", "$1");
str += (((val == 0 && i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10,
i))) != 0)) || (i == (int)Math.log10(value) && val == 1 && i % 4 == 1)) ? ""
: v[val])
+ ""
+ ((val == 0 && i % 4 != 0)
|| (i % 4 == 0 && (((int)(value % Math.pow(10, i + 4) / Math.pow(10, i))) == 0)) ? ""
: d[i]);
深蓝兄 我用1000000020.23测试你的方法 还是有点问题的
在上面已经给出正确的了,往上看看:
result = result.replaceAll("零([^亿圆])", "零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零([亿圆])", "$1");
壹拾亿零贰佰零壹仟零贰拾圆贰角叁分少了个万字啊 :)
public static String tochinessupper(String number)
{
String num = "零壹贰叁肆伍陆柒捌玖";
String dw = "圆拾佰仟万亿";
String m = number;
String mm[] = null;
String money=null;
String result=null;
if(m.indexOf(".")!=-1)
{
mm = m.split("\\.");
money = mm[0];
result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" +num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分";
}
else
{
money=m;
result="";
}
for (int i = 0; i < money.length(); i++)
{
String str = "";
int n = Integer.parseInt(money.substring(money.length() - i - 1,money.length() - i));
str = str + num.charAt(n);
if (i == 0)
{
str = str + dw.charAt(i);
}
else if ( (i + 4) % 8 == 0)
{
str = str + dw.charAt(4);
}
else if (i % 8 == 0)
{
str = str + dw.charAt(5);
}
else
{
str = str + dw.charAt(i % 4);
}
result = str + result;
}
result = result.replaceAll("零([^圆]{1})", "零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零圆", "圆");
return result;
}
String num = "零壹贰叁肆伍陆柒捌玖";
String dw = "圆拾佰仟万亿";
String m = "30020.23";
String mm[] = null;
mm = m.split("\\.");
String money = mm[0]; String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" +
num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分"; for (int i = 0; i < money.length(); i++) {
String str = "";
int n = Integer.parseInt(money.substring(money.length() - i - 1,
money.length() - i));
str = str + num.charAt(n);
if (i == 0) {
str = str + dw.charAt(i);
}
else if ( (i + 4) % 8 == 0) {
str = str + dw.charAt(4);
}
else if (i % 8 == 0) {
str = str + dw.charAt(5);
}
else {
str = str + dw.charAt(i % 4);
}
result = str + result;
} result = result.replaceAll("零([^亿万圆])", "零");
result = result.replaceAll("亿零+万","亿零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零([亿万圆])", "$1");
result =result.replaceAll("^壹拾","拾"); System.out.println(result);
result = result.replaceAll("零([^亿万圆角分])", "零");
result = result.replaceAll("亿零+万","亿零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零([亿万圆])", "$1");
result =result.replaceAll("壹拾","拾");
String[] unit = new String[]{"","拾","佰","仟","万","拾万","佰万","仟万","亿","拾亿","佰亿","仟亿"};
String src = "1000300020";
String desc = ""; // 转换数字
int len = src.length();
String[] descc = new String[len];
for (int i=0; i<len; i++) {
descc[i] = num[src.charAt(i) - '0'];
System.out.println(descc[i]);
} // 中间结果串
for (int i=0; i<len; i++) {
desc += descc[i];
if (!(descc[i].equals("零"))) {
desc += unit[len-1-i];
}
} // 去掉多余的”零“
desc = desc.replaceAll("零+", "零");
desc = desc.replaceAll("^零+", "");
desc = desc.replaceAll("零+$", ""); System.out.println(desc);
System.out.println(descc[i]);
可以去掉的
很好理解 因为考虑零比如0000 0203 1008 0002等数的汉语正确语法显示所以代码很长 希望有同是初学的朋友交流共同进步
程序:
///////////////////////////////////////////Numbers.java///////////////////////////////////////////
import java.io.*;
public class Numbers
{
public static void main(String [] args)
{
int ch =0;
String zero = new String("零");
String S="",S1="",S2="",S3="",S4="",S5="",S6="",S7="",S8="",S9="",S0="";//个十百千万......
System.out.println("请输入数字:[输入字母即可退出]");
while(true)
{
try{ ch=System.in.read(); } //逐个读取数字
catch(Exception e){ System.out.println(e.getMessage());}
switch(ch)
{ case '\r': //回车之后
break;
case '\n': //换行符之后
int x=S.length();
if(1==x) {} //判断数字位数,插入单位(十百千万) 主要是零在各个位置导致的汉语语法问题
////////////////////////////////////////////////////////////////////////////////////
if(2==x) { S0=S.substring(0,1);S1=S.substring(1);//最高十位 解决!
if(S0.equals(zero))S=S1;
else if(S1.equals(zero))S=S0+"十";
else S=S0+"十"+S1;}
///////////////////////////////////////////////////////////////////////////////////////
if(3==x) { S0=S.substring(0,1);S1=S.substring(1,2);S2=S.substring(2);//最高百位 解决!
if(S0.equals(zero))
{ if(S1.equals(zero))S=S2;
else if(S2.equals(zero))S=S1+"十";
else S=S1+"十"+S2; }
else if(S1.equals(zero))
{ if(S2.equals(zero))S=S0+"百";
else S=S0+"百零"+S2; }
else if(S2.equals(zero)) S=S0+"百"+S1+"十";
else S=S0+"百"+S1+"十"+S2; }
/////////////////////////////////////////////////////////////////////////最高千位 解决!
if(4==x)
{
S0=S.substring(0,1);S1=S.substring(1,2);
S2=S.substring(2,3);S3=S.substring(3);
if(S0.equals(zero))
{ if(S1.equals(zero))
{ if(S2.equals(zero))S=S3;
else if(S3.equals(zero))S=S2+"十";
else S=S2+"十"+S3; }
else if(S2.equals(zero))
{ if(S3.equals(zero))S=S1+"百";
else S=S1+"百零"+S3; }
else if(S3.equals(zero)) S=S1+"百"+S2+"十";
else S=S1+"百"+S2+"十"+S3; }
else if (S1.equals(zero))
{ if (S2.equals(zero))
{ if (S3.equals(zero)) S=S0+"千";
else S=S0+"千零"+S3; }
else if(S3.equals(zero)) S=S0+"千零"+S2+"十";
else S=S0+"千零"+S2+"十"+S3; }
else if(S2.equals(zero))
{ if(S3.equals(zero)) S=S0+"千"+S1+"百";
else S=S0+"千"+S1+"百零"+S3; }
else if(S3.equals(zero)) S=S0+"千"+S1+"百"+S2+"十";
else S=S0+"千"+S1+"百"+S2+"十"+S3; }
///////////////////////////////////////////////////////////////////////////////////
if(5==x) {}//万 同上理 代码翻番
if(6==x) {}//十万 从这开始出现几十几万的问题 可以解决!
if(7==x) {}//百万
if(8==x) {}//千万
if(9==x) {}//亿
//在处理零的问题时是
System.out.println(S); //输出结果
S="";
break;
//////////////////////////////////////////////////////////////////////////////////////
default:
switch(ch) //进行转换大写汉字
{
case '1': S=S+"一";break;
case '2': S=S+"二";break;
case '3': S=S+"三";break;
case '4': S=S+"四";break;
case '5': S=S+"五";break;
case '6': S=S+"六";break;
case '7': S=S+"七";break;
case '8': S=S+"八";break;
case '9': S=S+"九";break;
case '0': S=S+"零";break;
default: System.out.println("你输入的不是纯数字"); return;
}
}
}
}
}
public class IntegerConvert {
static char[] dw = {0x20, '拾', '佰', '仟', '万', '亿'};
static char[] ints = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};
private static String convert(int c) {
String out = "";
int base = 0;
if(0 == c) { return "零"; }
for(; c != 0; c /= 10) {
if(c % 10 != 0) {
out = new Character(ints[c % 10]).toString() +
new Character(dw[base]).toString() + out;
}
base++;
}
return out;
}
public static void main(String[] args) {
int test1 = 12434;
int test2 = 10000;
int test3 = 10001;
int test4 = 0;
int test5 = 1;
int test6 = 10100; System.out.println("test1: " + convert(test1));
System.out.println("test2: " + convert(test2));
System.out.println("test3: " + convert(test3));
System.out.println("test4: " + convert(test4));
System.out.println("test5: " + convert(test5));
System.out.println("test6: " + convert(test6));
}
}
public static void main(String args[]){
Turn t = new Turn();
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
t.print(s);
for(int i=0; i<=s.length()-1; i++){
t.diffract(Integer.parseInt(String.valueOf(s.charAt(i))));
t.unit(s.length()-i);
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void diffract(int i){
switch(i){
case 1:print("一");break;
case 2:print("二");break;
case 3:print("三");break;
case 4:print("四");break;
case 5:print("五");break;
case 6:print("六");break;
case 7:print("七");break;
case 8:print("八");break;
case 9:print("九");break;
case 0:print("零");break;
}
}
public void unit(int i){
//打印单位
switch(i){
case 1:break;
case 2:print("十");break;
case 3:print("百");break;
case 4:print("千");break;
case 5:print("万");break;
case 6:print("十万");break;
case 7:print("百万");break;
}
}
public void print(String unit){
System.out.print(unit);
}
}
public class ITCS {
public static void main(String[] args) {
String[] num = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
String[] unit1 = new String[]{"","拾","佰","仟"};
String[] unit2 = new String[]{"","万","亿","万"};
String str=args[0],string = "",str_2 = null;
System.out.print(str+"----->");
str=Str(str);
int i=str.length();
if(i==1)
string=num[Integer.parseInt(str)];
else{
int a=i/4,b=i%4,t=b;
String[] str_1=new String[a];
str_2=str.substring(0,b);
boolean boo1=true;
do{
for(int r=0;r<str_2.length();r++){
if(str_2.charAt(r)=='0'){
if(Str(str_2.substring(r,str_2.length())).equals("0"))
break;
else if(!(string.substring(string.length()-1,string.length()).equals("零")))string=string+"零";
}else
string=string+num[Integer.parseInt(""+str_2.charAt(r))]+unit1[b-1];
b--;
}
if(i!=a*4&!str_2.equals("0000"))
string=string+unit2[a];
b=4;
if(a>0){
str_2=str.substring(t,t+4);
}
t=t+4;
if(a<=0)boo1=false;
a--;
}while(boo1);
}
//System.out.println(str_2+"~~~~~"+str_2.length());
if(string.substring(0,2).equals("壹拾"))
string=string.substring(1,string.length());
System.out.println(string);
}
public static String Str(String str){
//Tab tab = null;
boolean boo=true;
int i=0;
while(boo){
if(str.charAt(0)=='0'){
i++;
if(str.length()==1){
boo=false;break;
}
str=str.substring(1,str.length());
}
else
boo=false;
}
//tab.setS(str);tab.setI(i);
return str;
}}
{
private String integerStr; //整数部分
private String decimalStr; //小数部分
private StringBuffer moneyStr = new StringBuffer("");
private int pointLocation = -1;
public static final char[] units = {'角', '圆', '万', '亿'};
public static final char[] num = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};
public Transform(String numberStr)
{
numberStr = trim(numberStr);
if ( !check(numberStr) )
{
numberStr = "0";
decimalStr = "0";
}
pointLocation = hasRadix(numberStr);
cut(numberStr);
}
//消除字符串前端的零
public String trim(String str)
{
return str.replaceAll("^0*","");
}
//检查是否为合法的金额字符串
public boolean check(String str)
{
if ( !str.matches("\\d+.?\\d*") )
{
return false;
}
else
{
return true;
}
}
//得到小数点所在位置
public int hasRadix(String number)
{
return number.indexOf('.');
}
//将金额字符串分割为整数部分与小数部分。暂时:整数部分位数支持12,即至千亿;小数部分至角
private void cut(String numberStr)
{
if ( pointLocation == -1 )
{
if ( numberStr.length() > 12 )
{
integerStr = numberStr.substring(numberStr.length()-12);
}
else
{
integerStr = numberStr;
}
decimalStr = "0";
return;
}
integerStr = numberStr.substring(0, pointLocation);
integerStr = (integerStr.length() > 12) ? integerStr.substring(integerStr.length()-12) : integerStr;
String temp = numberStr.substring(pointLocation+1);
if ( hasRadix(temp) != -1 )
{
temp = temp.substring(0, hasRadix(temp));
}
decimalStr = ( temp.length() > 1 ? temp.substring(0, 1) : temp );
}
//输出结果字符串,如遇非法字符串则输出"零圆"
public String toString()
{
char[][] temp = split();
for ( int a = 0; a < temp.length; a++ )
{
moneyStr.append(toTurnString(temp[a], temp.length-a));
}
if ( !decimalStr.equals("0") )
{
moneyStr.append(toTurnString(decimalStr.substring(0).toCharArray(), 0));
}
return moneyStr.toString().equals("圆") ? "零圆" : moneyStr.toString();
}
//输出每一组的对应表示
private String toTurnString(char[] number, int i)
{
StringBuffer temp = new StringBuffer("");
boolean isZero = false;
int zeroLen = 0;
for ( int a = 0; a < number.length; a++ )
{
if ( number[a] == '0' )
{
zeroLen++;
isZero = true;
}
else
{
isZero = false;
}
if ( !isZero )
{
if ( zeroLen != 0 )
{
temp.append(num[0]);
zeroLen = 0;
}
temp.append(toTurnNum(number[a])).append(toTurnUnit(number.length-a, i));
}
else
{
if ( a == number.length-1 )
{
temp.append(toTurnUnit(number.length-a, i));
}
}
}
return temp.toString();
}
private char toTurnUnit(int len , int unit)
{
switch ( len )
{
case 1: return units[unit];
case 2: return '拾';
case 3: return '佰';
case 4: return '仟';
}
return '0';
}
//将金额字符串的整数部分以四位为一组进行分割
private char[][] split()
{
int lenTmp = integerStr.length();
int strArrayLength = lenTmp/4+((lenTmp-lenTmp/4*4)>0 ? 1 : 0 );
char[][] temp = new char[strArrayLength][];
for ( int a = temp.length-1; a >= 0; a-- )
{
if ( a == 0 )
{
temp[a] = integerStr.substring(0, lenTmp).toCharArray();
return temp;
}
temp[a] = integerStr.substring(lenTmp-4,lenTmp).toCharArray();
lenTmp -= 4;
}
return temp;
}
public char toTurnNum(char c)
{
return num[c-(int)'0'];
}
}
http://blog.csdn.net/zh029t 或 http://blog.csdn.net/LatestEntry.aspx?CategoryID=3
http://blog.csdn.net/zh029t 或 http://blog.csdn.net/LatestEntry.aspx?CategoryID=3
不过在下有点点建议,
望大家海含:
第一段代码到最后,
都好好欣赏了一番,
发现个别代码一个大可改善的地方:
没注释,
变量没意义,
中文拼不上,
英文也对不上,
既然写出来给大家观摩,
何不漂亮一点呢,
如果我们的代码都注定只有自己看,
那写成这样也无可厚非。也是刚毕业,
工作时看了老同志的代码,
就真的感觉到了什么叫“垃圾”代码,
是人都看不懂,
Java好一点,
C就天书一样!
为不被别人骂自己写的是垃圾,
我不得不多写点注释,
推敲一下命名,
最后format一下。刚在http://promosearch.atomz.com上看些咚咚,
代码就比较整齐了,
看起来有点养眼,
师夷长技!
师夷长技!
共勉!
共勉!
-----------------------------
万亿零叁万零贰拾圆贰角叁分
建议在最后加上这段代码就完美了:
while(result.startsWith("零")||result.startsWith("圆"))
result=result.replaceFirst("[零圆]", "");可以避免“零三万元”,“圆零”,“零一分”这样的Bug
学习ing~~~~~~~```
就是输入类似 000.23时