背景
在java实体bean处理的过程中,需要将实体类的属性与注释向对应起来。
/**
* userId编号
*/
private Integer userId;
//用户姓名
private String userName;
//密码
private String password;
/*
* 用户电话
*/
private String phone;
上面的java实体类的代码希望转换成,map的对应形式。
map.put("userId", "userId编号");
map.put("userName", "用户姓名");
map.put("password", "密码");
map.put("phone", "用户电话");
解决思路
处理注释
由于代码文件是按行读取,每行line.contains("*")为true就认为这是一个多行注释,放入StringBuilder中;
提取多行注释的文字,需要用到正则 \/\*+(.*)\*\/
。
单行注释如果line.contains("//")就认为是一个单行注释。提取单行注释很容易,直接replace掉//
就可以了。
处理实体类的属性
正则匹配实体类的属性正则 private\s[A-Za-z].*\s([A-Za-z0-9]+)\;
处理规则
仿照中缀表达式的思想,注释内容和实体类属性是成对出现,而且配对不能错乱。
当某个实体类的属性没有注释时就不处理这个实体类。
解决方式,首先处理提取注释后,进行压栈。
随后处理实体类的属性,紧接着栈顶出栈就是当前这个实体类属性的注释。
定义正则
private static final Pattern PROGRAM_REG = Pattern.compile("private\\s[A-Za-z].*\\s([A-Za-z0-9]+)\\;"