本帖最后由 wdhm5423 于 2015-3-3 23:29 编辑
正则表达式很容易跟String挂钩,用起来处理String方便,可以学花不了多久。
我的入学测试题:
- 金额转换,阿拉伯数字转换成中国传统形式。
- 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
- 思路:
- 1、每一位对应一个单位,每一个数字对应一个数字中文大写形式,可以创建字符串数组,通过位数和数字对应字符串
- 2、按对应关系可以得带一串读法字符串,接下来对该字符串进行删减修正。
- 3、得到阿拉伯数字的中国传统形式。
- */
- public class Test10 {
- public static void main(String[] args) {
- Long l = 101000001010L;
- String str = l + "";// 转化为字符串
- StringBuilder sb = new StringBuilder();// 字符串缓冲区
- trans(str, sb);
- String s = sb.toString();// 转化为字符,方便替换操作
- // 对字符串进行修正
- s = s.replaceAll("零仟", "零");
- s = s.replaceAll("零佰", "零");
- s = s.replaceAll("零拾", "零");
- s = s.replaceAll("拾零", "拾");
- s = s.replaceAll("佰零{2}", "佰");
- s = s.replaceAll("仟零{3}", "仟");
- s = s.replaceAll("亿零{4}万零{4}", "亿");
- s = s.replaceAll("万零{4}", "万");
- s = s.replaceAll("亿零{4}万", "亿零");
- s = s.replaceAll("零+", "零");
- System.out.println(s);
- }
- public static void trans(String str, StringBuilder sb) {
- if ("".equals(str)) {// 判断是否已经没有数字
- return;
- }
- String[] shuzi = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };// 数字对应大写
- String[] danwei = { "圆整", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾",
- "佰", "仟" };// 位数对应单位
- int ns = Integer.parseInt(str.charAt(0) + "");// 取字符串的第一个数
- int nd = str.length() - 1;// 由字符串的长度得到位数
- sb.append(shuzi[ns]).append(danwei[nd]);// 把数字加位数构成字符串第一个位置的读法
- str = str.substring(1);// 把已经读好的第一个位置删除
- trans(str, sb);// 递归,读接下来的字符串的第一个位置
- }
- }
复制代码 |