谁能给讲解下啊 最好是注释下
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;
}

解决方案 »

  1.   

    public String getNumberToRMB(String m)...{
        String num = "零壹贰叁肆伍陆柒捌玖";
        String dw = "圆拾佰仟万亿";
        String mm[] = null;
        mm = m.split("\.");//以"\."为标记将字符串分成多个子字符串,如"tom\.tony\.jim"分成tom,tony,jim三个字符串
        String money = mm[0];    String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0))) + "角" +
            num.charAt(Integer.parseInt("" + mm[1].charAt(1))) + "分";//将("" + mm[1].charAt(0))的内容转换成整型,再取num中第这个整型个位置的字符    for (int i = 0; i < money.length(); i++) ...{
          String str = "";
          int n = Integer.parseInt(money.substring(money.length() - i - 1,
                                                   money.length() - i));//将money中某一个字符以整型输出,赋予n
          str = str + num.charAt(n);
          if (i == 0) ...{
            str = str + dw.charAt(i);
          }//i==0则为个位,则后面的单位为dw中的第零个元素,即"圆"
          else if ( (i + 4) % 8 == 0) ...{
            str = str + dw.charAt(4);
          }//若为从右边数的第四位则为万位,单位为dw中的第四个元素,即"万"
          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;
    }
      

  2.   

    mm = m.split("\.");//以"\."为标记将字符串分成多个子字符串,如"tom\.tony\.jim"分成tom,tony,jim三个字符串   
    为什么以"\."为标记啊 而且我在jbuilder中这样写是报错的
     mm = m.split("\.");//这样写才不报错
      

  3.   

     mm = m.split(".");//这样写才不报错
      

  4.   

    result = result.replaceAll("零([亿万圆])", "$1");
    “$1”是什么意思?
      

  5.   

    查了API,现在知道“$1”的意思了:
    在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作为字面值替换字符串时所产生的结果不同。美元符号可视为“到如上所述已捕获子序列的引用”。所以可以把“$1”看成是group(1);
      

  6.   

    mm = m.split("\.");
    为什么是以"\."分解啊 而且这样我在jbuilder下提示是非法的字符
      

  7.   

    在Windows下,要用两个反斜杆表示转义!
    所以要改为:mm = m.split("\\."); 就是把小写的人民币在“.”处分为整数跟小数两个部分
      

  8.   

     我在书上看到的程序是这么写的
    String[] data="123:456:158:745";
    String[]ds=data.split(":");
    他是直接写的 我运行了没有问题 它怎么不用转义字符啊楼上的看打错了作者的程序是这样的  mm = m.split("\.");
      

  9.   

    "楼上的看打错了作者的程序是这样的  mm = m.split("\."); "
    -->作者的程序不一定是对的.你在Windows下,不用("\\.")怎么对小数点进行转义呢?你发的这个程序并不是全面的.比如你输入0.63时,程序的结果是:圆陆角叁分,而我们中国的习惯应该是陆角叁分!
    所以还必须有个正则式:result = result.replaceAll("^圆", "");
      

  10.   

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

  11.   

    johnsoncr  很感谢你 马上结贴