这些代码都是自己写出来没有经过修改的
第一题(这个答案可能还有些地方没有考虑到,比如10001000的时候结果就差一个零):
class="java">package com.shengshiyuan.competition;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DigitalConversion {
public void conversion(String str) {
// 首先用正则表达式判断是否都为数字
if (this.isNumeric(str)) {
// 最多输入8个字符
if (str.length() <= 8) {
String result = this.getNumberToRMB(str);
System.out.println(result);
} else {
System.out.println("用户输入的字符个数不能多于8个!");
}
} else {
System.out.println("用户输入的字符不都为数字,无法转换!");
}
}
/**
* 利用正则表达式判断是否都为数字
* 方法: isNumeric <br>
* 描述: TODO <br>
* 作者:
* 时间: Nov 4, 2013 11:08:50 AM
* @param str
* @return
*/
public boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
/**
*
* 方法: getNumberToRMB <br>
* 描述: 将数值转换成人民币大写,根据网上一搜索整理修改而成 仍然有两个Bug 1、万亿以上可能出错 2、连续0可能出错
* 作者:
* 时间: Nov 4, 2013 11:31:48 AM
* @param rmb
* @return
*/
public String getNumberToRMB(String rmb) {
/**//*
* 人民币表达式中使用的中文字符(num)及计量单位位字符(dw)
*/
// String num = "零壹贰叁肆伍陆柒捌玖";
String num = "零一二三四五六七八九";
String dw = "个十百千万亿";
// 补齐小数位,多加“0”不影响计算和转换
// rmb += rmb.indexOf(".") == -1 ? ".00" : "00";
// String mm[] = rmb.split("//.");
// System.out.println("mm" + mm);
// String money = mm[0];
String money = rmb;
System.out.println(money);
// String money = rmb;
/**//*
* 转换小数部分
*/
// String result = num.charAt(Integer.parseInt("" + mm[1].charAt(0)))
// + "角" + num.charAt(Integer.parseInt("" + mm[1].charAt(1)))
// + "分";
String result = "";
// String result = "";
if (money.startsWith("0")) {
while (money.startsWith("0")) {
money = money.substring(1, money.length());
}
}
/**//*
* 设置循环,从整数最低位开始转换
*/
for (int i = 0; i < money.length(); i++) {// i=位数,从个位开始取值
String str = "";
int n = Integer.parseInt(money.substring(money.length() - i - 1,
money.length() - i));// 当前位的数值=n
System.out.println("n" + n);
str = str + num.charAt(n);// 根据数值取出中文大写字符
System.out.println("str" + str);
// 根据位数判断
if (i == 0) {
str += dw.charAt(i);// 加上个
} else if ((i + 4) % 8 == 0) {
str += dw.charAt(4);// 加上万
} else if (i % 8 == 0) {
str += dw.charAt(5);// 加上亿
} else {
str += dw.charAt(i % 4);// 不为整就求余(加上十百千)
}
result = str + result;// 把当前字符加到最前面(最高位)
}
System.out.println("result:" + result);
result = result.substring(0, result.length() - 1);
result = result.replaceAll("零([^亿万])", "零");
result = result.replaceAll("亿零+万", "亿零");
result = result.replaceAll("零+", "零");
result = result.replaceAll("零([亿万元])", "$1");
result = result.replaceAll("一十", "十");
// result = result.replaceAll("^元", "");
// result = result.replaceAll("零角零分", "整");
// result = result.replaceAll("零分", "整");
if (result.endsWith("零")) {
result = result.substring(0, result.length() - 1);
}
return result;
}
public static void main(String[] args) {
new DigitalConversion().conversion("10000100");
}
}
第二题:
package com.shengshiyuan.competition;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定义注解
* 类: Test <br>
* 描述: TODO <br>
* 作者:
* 时间: Nov 1, 2013 10:51:18 AM
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test {
}
package com.shengshiyuan.competition;
/**
* 供程序详解类
* 类: MyClass <br>
* 描述: TODO <br>
* 作者:
* 时间: Nov 1, 2013 10:49:02 AM
*/
public class MyClass {
public void method1() {
System.out.println("method1");
}
@Test
public void method2() {
System.out.println("method2");
}
@Test
public int add(int a, int b) {
return a + b;
}
@Test
public void doSomething(String str) {
System.out.println(str);
}
@Test
public void doSomething2() {
System.out.println("doSomething2()");
}
}
package com.shengshiyuan.competition;
import java.lang.reflect.Method;
/**
* 当用户将类的全名以字符串的形式传递给该run方法时,run方法会自动执行用户所提供的类中的所有被@Test注解所修饰的public void 且不带参数的方法
* 类: ApplicationRun <br>
* 描述: TODO <br>
* 作者:
* 时间: Nov 1, 2013 10:54:07 AM
*/
public class ApplicationRun {
public void run(String className) throws Exception {
Class<?> targetClass = Class.forName(className);
Object object = targetClass.newInstance();
Method[] methods = targetClass.getDeclaredMethods();
for (Method method : methods) {
// 注解里面包含Test注解
if (null != method.getAnnotation(Test.class)) {
Class<?>[] parameClass = method.getParameterTypes();
if (0 == parameClass.length) {
// 调用method对应方法
method.invoke(object, new Object[] {});
}
}
}
}
public static void main(String[] args) throws Exception {
ApplicationRun application = new ApplicationRun();
application.run("com.shengshiyuan.competition.MyClass");
}
}