一高手写的将阿拉伯数字转化成大写的人民币数字看不明白

zbl0201 2007-10-27 08:02:45
谁能给讲解下啊 最好是注释下


public String getNumberToRMB(String m)...{
String num = "零壹贰叁肆伍陆柒捌玖";
String dw = "圆拾佰仟万亿";
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("壹拾","拾");

return result;
}
...全文
547 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
源源源源圆圆 2011-08-04
  • 打赏
  • 举报
回复
那要是1002003004转换就不正确了啊?
茜茜770 2008-10-14
  • 打赏
  • 举报
回复
大家都很牛,跟大家学习
yuan_2004 2008-02-22
  • 打赏
  • 举报
回复
太烂了!
jinggangshi 2007-10-29
  • 打赏
  • 举报
回复
元角为整数时,出错,应该对分为零及零角零分判断取整
zbl0201 2007-10-29
  • 打赏
  • 举报
回复
johnsoncr 很感谢你 马上结贴
longtrue 2007-10-29
  • 打赏
  • 举报
回复
'.'要转义,正则表达式里的'\'也要转义,所以应该是'\\.'.
longtrue 2007-10-29
  • 打赏
  • 举报
回复
'.'要转义,正则表达式里的'\'也要转义,所以应该是'\\.'.
sutdy 2007-10-29
  • 打赏
  • 举报
回复
一高手?
当判断1位小数时报错。
johnsoncr 2007-10-28
  • 打赏
  • 举报
回复
晕,怎么发了两次
johnsoncr 2007-10-28
  • 打赏
  • 举报
回复
"楼上的看打错了作者的程序是这样的 mm = m.split("\.");"
-->作者的程序并不一定都是对的.在Windows下,不用"\\."怎么来对小数点进行转义呢?

"String[] data="123:456:158:745";
String[]ds=data.split(":");
他是直接写的 我运行了没有问题 它怎么不用转义字符啊 "
-->LZ还没有真正理解转义的含义,当一个符号没有特殊含义时就不用转义
而"."之所以要转义是因为它有特殊的意义.在正则式中,没转义的"."代表除了换行符之外的任何字符.
johnsoncr 2007-10-28
  • 打赏
  • 举报
回复
"楼上的看打错了作者的程序是这样的 mm = m.split("\."); "
-->作者的程序不一定是对的.你在Windows下,不用("\\.")怎么对小数点进行转义呢?

你发的这个程序并不是全面的.比如你输入0.63时,程序的结果是:圆陆角叁分,而我们中国的习惯应该是陆角叁分!
所以还必须有个正则式:result = result.replaceAll("^圆", "");
zbl0201 2007-10-28
  • 打赏
  • 举报
回复
不知道 没看明白
johnsoncr 2007-10-28
  • 打赏
  • 举报
回复
result = result.replaceAll("零([亿万圆])", "$1");
“$1”是什么意思?
hpxs2 2007-10-28
  • 打赏
  • 举报
回复
我曾经有过这样的面试,可惜不会写,呵呵
zbl0201 2007-10-28
  • 打赏
  • 举报
回复
 mm = m.split(".");//这样写才不报错
zbl0201 2007-10-28
  • 打赏
  • 举报
回复
mm = m.split("\.");//以"\."为标记将字符串分成多个子字符串,如"tom\.tony\.jim"分成tom,tony,jim三个字符串   

为什么以"\."为标记啊 而且我在jbuilder中这样写是报错的
 mm = m.split("\.");//这样写才不报错
zbl0201 2007-10-28
  • 打赏
  • 举报
回复
我在书上看到的程序是这么写的
String[] data="123:456:158:745";
String[]ds=data.split(":");
他是直接写的 我运行了没有问题 它怎么不用转义字符啊

楼上的看打错了作者的程序是这样的 mm = m.split("\.");
johnsoncr 2007-10-28
  • 打赏
  • 举报
回复
在Windows下,要用两个反斜杆表示转义!
所以要改为:mm = m.split("\\."); 就是把小写的人民币在“.”处分为整数跟小数两个部分
zbl0201 2007-10-28
  • 打赏
  • 举报
回复
mm = m.split("\.");
为什么是以"\."分解啊 而且这样我在jbuilder下提示是非法的字符
johnsoncr 2007-10-28
  • 打赏
  • 举报
回复
查了API,现在知道“$1”的意思了:
在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作为字面值替换字符串时所产生的结果不同。美元符号可视为“到如上所述已捕获子序列的引用”。所以可以把“$1”看成是group(1);
加载更多回复(1)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧