正则表达式判断是否是一个java方法:
具体描述:
将一个java类读成流转换为字符串之后,需要用正则表达式判断是否存在java方法,
现在不知道正则表达式判断方法如何写正则表达式Java类
具体描述:
将一个java类读成流转换为字符串之后,需要用正则表达式判断是否存在java方法,
现在不知道正则表达式判断方法如何写正则表达式Java类
解决方案 »
- poi导出excel
- Spring初学遇到的问题
- java 怎样只在一个JFrame中调用其他类的Jframe
- 为什么不要在servlet里创建新线程
- struts2 我不想做视图跳转,只是完成一个逻辑处理
- proxool 的问题
- 进一步学习struts的疑惑。。高手指引方向。。
- servler中不能读取text类型的数据
- 高分求! IIS的FTP服务器,如果付权限可写,则匿名用户也可写;如果不可写,则操作员(Administrator)也不可写! 如何实现匿名用户只读
- 因为第三方接口仅仅支持jpg byte[]类型,所以我需要将 bmp,gif,png的byte[]转成 jpg的 byte[]。该如何进行呢?有第三方jar包吗
- Spring AOP的自动代理的一个小Demo无法找到错误所在: BeanNameAutoProxyCreator
- java Web开发中数据层像数据库传递中文参数变乱码,如何解决?
楼主如果需要操作class,可以使用一些byte code java lib,比如 cglib, javassist
package com.tur.demo;public class Hello {
public static void main(String[] args) {
String m = "public List<int> foo(Type name, ...)"; // 名字,模板,类型的正则
String namePattern = "[_a-zA-Z]+\\w*";
String templatePattern = "(<[_a-zA-Z]+\\w*(, [_a-zA-Z]+\\w*)*>)?";
String typePattern = namePattern + templatePattern; // 参数的正则
String argPatternZero = ""; // 无参数
String argPatternDynamic = "..."; // 动态参数
String argPattern = typePattern + " " + namePattern; // 一个参数
String argPatternOne = argPattern + "(, ...)?"; // 一个参数 + 动态参数
String argPatternMulti = argPattern + "(, " + argPattern + ")*(, ...)?"; // 多个参数 + 动态参数
String argsPattern = "(" + argPatternZero + "|" + argPatternDynamic + "|" + argPatternOne + "|" + argPatternMulti + ")"; // 方法签名的正则
String methodSignaturePattern = "(public|protected|private)( static)?( final)? " +
typePattern + " " + namePattern + "\\(" + argsPattern + "\\)"; // 每个部分的正则测试
System.out.println("List<int, Object>".matches(typePattern));
System.out.println("".matches(argPatternZero));
System.out.println("...".matches(argPatternDynamic));
System.out.println(argPatternOne);
System.out.println("int age".matches(argPatternOne));
System.out.println(argPatternMulti);
System.out.println("int age, List<Integer> values".matches(argPatternMulti));
System.out.println("int age, List<Integer> values, ...".matches(argsPattern)); // 测试是否一个方法的签名
// 暂时规则,单词间只用一个空格分隔,因为实现情况要考虑回车,多个空格,tab键等,把空格在正则中换成\\s+
// 例如要在','前后加\\s*,函数签名中的'(', ')'前后加\\s*
// 这里为了不使正则变得太难懂,直接只用了一个空格.
System.out.println(methodSignaturePattern);
System.out.println("public void foo(...)".matches(methodSignaturePattern));
System.out.println("public List<Integer> foo(String name, Set<Double> values, ...)".matches(methodSignaturePattern));
}
}
package com.tur.demo;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class CommentRegExp {
public static void main(String[] args) {
String str = "\"\"\"String\\\" /*foo*/ text\"; biao /* // \"goto\" */ \"//hello /*comment*/\"// What's this."; String emptyString = "(\"\")";
String normalString = "(\".*?[^\\\\]\")"; // 需要再处理"string\""的情况
String lineComment = "(//.+$)";
String blockComment = "(/\\*.+?\\*/)";
Pattern pattern = Pattern.compile(emptyString + "|" + normalString + "|" + lineComment + "|" + blockComment);
Matcher matcher = pattern.matcher(str); while (matcher.find()) {
String matchedString = matcher.group(0);
// if (!matchedString.startsWith("\"")) {
System.out.println(matchedString);
// }
}
}
}