展开全部
虽然你要处理的是 public void find(String name,int age);但636f707962616964757a686964616f31333337386563核心问题是,对括号内String name,int age参数的解析;我写了一个工具方法,备注的很清晰,仅供参考。//解析括号内的参数,如果使用java的pattern类,轻松搞定
public static void main(String[] args) {
System.out.println(executeAnalysis("public void find(String name,int age)"));
System.out.println(executeAnalysis("public void find(Object name,Integer age)"));
System.out.println(executeAnalysis("public void find(boolean bool)"));
System.out.println(executeAnalysis("public void find()"));
}
/**
* 此方法可以匹配任意类型和任意个参数,但未处理数组类型,泛型类型以及用中文等非字母命名的自定义类型
* @param des
*/
public static String executeAnalysis(String des) {
if(des==null || des.length()==0){
return null;
}
//检查字符串是否有参数
Matcher argMatcher = Pattern.compile("\\((.+)\\)").matcher(des);
//空参,返回原始字符串
if(!argMatcher.find()){
return des;
}
//提取括号内的参数
String content =argMatcher.group(1);
//参数间铁定以逗号分隔
String[] fragment = content.split(",");
//构造提取参数类型的正则表达式
Pattern typeRegulx= Pattern.compile("([a-zA-Z]\\w*)\\s+.+");
//准备好返回值的固定部分
StringBuffer buf = new StringBuffer("public void find(");
//遍历依次提取每个参数的类型
Matcher typeMatcher;
for(String item:fragment){
//构造匹配
typeMatcher = typeRegulx.matcher(item);
//执行匹配,这里一定会匹配成功,否则执行本方法没有意义
typeMatcher.find();
//提取并追加到返回结果中
buf.append(typeMatcher.group(1)).append(",");
}
//去除多余的逗号并返回完整字符串
return buf.substring(0, buf.length()-1)+")";
}
运行结果:
public void find(String,int)
public void find(Object,Integer)
public void find(boolean)
public void find()
时间关系,没处理数组,泛型之类的,但是也很简单。楼主可以自由发挥,有问题可以联系我。