怎么将人民币(¥2561011.56) 转换成(贰佰伍拾陆万壹千零壹拾壹元伍角陆分) 高手们帮帮忙吧?急需

解决方案 »

  1.   

    用java.text包下的类能实现
    去查查API,应该比较简单,可试试
      

  2.   


    /**
     * @(#):DigitalToCharacter.java
     * @ description:将人民币小写转换为大写
     * @ author:茫茫大海
     * @ version:v2010
     * @ copyright:茫茫大海
     */package zhchljr.cn.com.sina.blog;import java.util.Scanner;public class DigitalToCharacter {

    /**
     * @ description:构造方法私有化,防止外部产生该类的实例
     */
    private DigitalToCharacter() {

    }

    /**
     * 
     * @param sDigital 小写的人民币
     * @return 转换成人民币的大小字符串
     * @throws Exception 若sDigital中含有除"."外的非数字字符,就返回异常
     */
    public static String convert(String sDigital) throws Exception {
    String[] digital = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    String[][] unit = {
    { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟",
    "万", "拾", "佰", "仟" }, { "厘", "分", "角" } };

    StringBuffer result = new StringBuffer();
    try {
    String[] sParts = sDigital.split("\\.");
    if(sParts.length > 2) {
    throw new Exception("小数点位数太多,请检查!");
    }

    for(int i=sParts.length-1; i>=0; --i) {
    StringBuffer sPart = new StringBuffer(sParts[i]);

    if(i == 0) {
    //处理整数部分
    sPart.reverse();
    for(int j=0; j<sPart.length() && j<unit[i].length; ++j) {
    if(sPart.charAt(j) - '0' < 0 || sPart.charAt(j) - '9' > 0) {
    throw new Exception("含有非数字字符!");
    } else {
    result.insert(0, digital[sPart.charAt(j) - '0'] + unit[i][j]);
    }
    }
    } else {
    //处理小数部分,最多保留三位小数
    sPart.reverse();
    for(int j=0; j<sPart.length() && j<unit[i].length; ++j) {
    if(sPart.charAt(j) - '0' < 0 || sPart.charAt(j) - '9' > 0) {
    throw new Exception("含有非数字字符!");
    } else {
    result.insert(0, digital[sPart.charAt(j) - '0'] + unit[i][j]);
    }
    }
    }
    }
    } catch (Exception e) {
    throw e;
    }

    //处理零
    for (int i=0; i<result.length(); ++i){
    if (result.charAt(i) == '零'){
    if (result.charAt(i+1) == '元' || result.charAt(i+1) == '万' || result.charAt(i+1) == '亿'){
    result.replace(i, i+1, "$");
    }
    else{
    if ((i+2 == result.length()) || ((i+2 < result.length()) && (result.charAt(i+2) ==  '零'))){
    result.replace(i, i+2, "$$");
    }
    else{
    result.replace(i+1, i+2, "$");
    }
    }
    }
    }
    return result.toString().replace("$", "");
    }

    /**
     * 
     * @param args 
     */
    public static void main(String[] args) {
    System.out.println("请输入一串数字:");
    Scanner input = new Scanner(System.in);
    String sDigital = input.next();

    try{
    System.out.println(convert(sDigital));
    } catch (Exception e) {
    System.out.println(e.getMessage());
    }
    }
    }
      

  3.   

    但是还是得修改程序 ,有bug
      

  4.   


    /*
    *怎么将人民币(¥2561011.56) 转换成(贰佰伍拾陆万壹千零壹拾壹元伍角陆分) 高手们帮帮忙吧?急需
    */import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test{ private static String regex = null;
    private static Pattern pattern = null;
    private static Matcher matcher = null; public static void main(String[] args){
    String content = "¥2561011.56";
    String result = process(content); System.out.println(result);
    } private static String process(String content){
    //最多支持到999999999.999
    regex = "^¥(\\d{1,9})(?:\\.(\\d{1,3}))?$";
    pattern = Pattern.compile(regex);
    matcher = pattern.matcher(content);

    String left = null;
    String right = null;
    if(matcher.matches()){
    left = matcher.group(1);
    right = matcher.group(2);
    //如果没有小数部分 right == null
    if(right == null){
    right = "";
    }
    }else{
    throw new IllegalArgumentException("content = " + content + " isn't valid!");
    } right = process_right(right);
    left = process_left(left); content = left + right; return content;
    } private static String process_right(String right){
    //处理点号右边
    String[] r_signs = {"角","分","厘"}; regex = "(\\d)(?=\\d|$)";  //这里的正则表示数字后面是数字或者是直接结尾
    pattern = Pattern.compile(regex);
    matcher = pattern.matcher(right);

    int index = 0;
    while(matcher.find()){
    right = right.replaceFirst(regex,"$1" + r_signs[index ++]);//将对应的sign放入到对应的位置
    matcher = pattern.matcher(right);
    } //到这里实际还没结束,有可能出现类似 52.002 这时候的读法应该是 。。零几厘,而不是 零角零分贰厘 right = right.replaceAll("0.","0");
    right = right.replaceAll("0+","0");//当多个零一起时候消除成一个零 right = transfer(right);
    return right;
    } private static String process_left(String left){
    //处理点号左边 这个相对比较容易
    String[] l_signs = {"元","十","百","千","万","十","百","千","亿","十","百","千"}; int index = 0; left = left + l_signs[index ++]; regex = "(\\d+)(\\d)(?!\\d)(.*)$";
    pattern = Pattern.compile(regex);
    matcher = pattern.matcher(left);

    while(matcher.find()){
    left = matcher.group(1) + l_signs[index ++] + matcher.group(2)+matcher.group(3);
    matcher = pattern.matcher(left);
    } //这里同样要对零的情况进行处理 left = left.replaceAll("0.","0");
    left = left.replaceAll("0+","0"); left = transfer(left);
    return left;
    } private static String transfer(String content){
    String[] nums = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    for(int i = 0 ; i < 10 ; i ++){
    content = content.replaceAll(i + "" , nums[i]);
    }
    return content;
    }
    }
      

  5.   


    String[] l_signs = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};这里需要改成这样子
      

  6.   


     regex = "^¥(\\d{1,12})(?:\\.(\\d{1,3}))?$";可以把正则的范围变大,这样的话支持的数字可以到 1千亿贰仟贰佰贰拾贰亿贰仟贰佰伍拾陆万壹仟零壹拾壹元伍角陆分