docs: public static int cnNumericToArabic( String cnn, boolean flag ) 
      {
          cnn = cnn.trim();
          if ( cnn.length() == 1 ) return isCNNumeric(cnn.charAt(0));
          
          if ( flag ) cnn = cnn.replace('佰', '百')
                  .replace('仟', '千').replace('拾', '十').replace('零', ' ');
          
          int yi = -1, wan = -1, qian = -1, bai = -1, shi = -1;
          int val = 0;
          yi = cnn.lastIndexOf('亿');
          if ( yi > -1 ) {
              val += cnNumericToArabic( cnn.substring(0, yi), false ) * 100000000;
              if ( yi < cnn.length() - 1 ) {
                  cnn = cnn.substring(yi + 1, cnn.length());
              } else {
                  cnn = "";
              }
              
              if ( cnn.length() == 1 ) {
                  int arbic = isCNNumeric(cnn.charAt(0));
                  if ( arbic <= 10 )
                      val += arbic * 10000000;
                  cnn = "";
              }
          }
          
          wan = cnn.lastIndexOf('万');
          if ( wan > -1 ) {
              val += cnNumericToArabic( cnn.substring(0, wan), false ) * 10000;
              if ( wan < cnn.length() - 1 ) {
                  cnn = cnn.substring(wan + 1, cnn.length());
              } else {
                  cnn = "";
              }
              
              if ( cnn.length() == 1 ) {
                  int arbic = isCNNumeric(cnn.charAt(0));
                  if ( arbic <= 10 )
                      val += arbic * 1000;
                  cnn = "";
              }
          }
          
          qian = cnn.lastIndexOf('千'); 
          if ( qian > -1 ) {
              val +=  cnNumericToArabic( cnn.substring(0, qian), false ) * 1000;
              if ( qian < cnn.length() - 1 ) {
                   cnn = cnn.substring(qian + 1, cnn.length());
              } else {
                  cnn = "";
              }
              
              if ( cnn.length() == 1 ) {
                  int arbic = isCNNumeric(cnn.charAt(0));
                  if ( arbic <= 10 )
                      val += arbic * 100;
                  cnn = "";
              }
          }
          
          bai = cnn.lastIndexOf('百');
          if ( bai > -1 ) {
              val += cnNumericToArabic( cnn.substring(0, bai), false ) * 100;
              if ( bai < cnn.length() - 1 ) {
                  cnn = cnn.substring(bai + 1, cnn.length());
              } else {
                  cnn = "";
              }
              
              if ( cnn.length() == 1 ) {
                  int arbic = isCNNumeric(cnn.charAt(0));
                  if ( arbic <= 10 )
                      val += arbic * 10;
                  cnn = "";
              }
          }
          
          shi = cnn.lastIndexOf('十');
          if ( shi > -1 ) {
              if ( shi == 0 ) {
                   val += 1 * 10;
              } else {
                  val += cnNumericToArabic( cnn.substring(0, shi), false ) * 10;
              }
              
              if ( shi < cnn.length() - 1 ){
                  cnn = cnn.substring(shi + 1, cnn.length());
              } else {
                  cnn = "";
              }   
          }
          
          cnn = cnn.trim();
          for ( int j = 0; j < cnn.length(); j++ ) {
              val += isCNNumeric(cnn.charAt(j)) * Math.pow(10, cnn.length() - j - 1);
          }
          
          return val;
      }