首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

正则表达式判断是不是是一个java方法

2013-04-26 
正则表达式判断是否是一个java方法正则表达式判断是否是一个java方法:具体描述:将一个java类读成流转换为

正则表达式判断是否是一个java方法
正则表达式判断是否是一个java方法:
具体描述:
将一个java类读成流转换为字符串之后,需要用正则表达式判断是否存在java方法,
现在不知道正则表达式判断方法如何写 正则表达式 Java 类
[解决办法]
这个问题其实不太好解,但是如果把函数签名的每一个部分分开来用正则表达,就会相对容易许多。

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));
    }
}

热点排行