import java.io.Serializable;
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String author;
public Book() {
super();
// TODO Auto-generated constructor stub
}
public Book(Integer id, String name, String author) {
super();
this.id = id;
this.name = name;
this.author = author;
}
// 此处省略getter和setter方法,请自己补上
@Override
public String toString() {
return “Book [id=” + id + “, name=” + name + “, author=” + author + “]”;
}
}1
2
3
4
5
6可以看到`getter`方法和`setter`方法已经从代码之中移除出去了,这样我们**写文章的时候代码比较紧凑,便于阅读**.
## 不足的地方 ##
这个正在表达式不适合方法体之中存在代码快的情况.因为它以`}`作为方法的介绍标记.但是如果此时方法体重存在`}`这个符号,将不会匹配成功.
# 改进 #
上面的代码并不能匹配到方法体之中有嵌套的代码块的情况.
## 匹配正则 ##
public\s+(?:\w+(?:\s+)?)+((?:\,?\s\w+\s+\w+))(\s+){(?:(?:\n|\r\n).)?\1}1
上面正则判断方法的代码如下:
(\s+){(?:(?:\n|\r\n).)?\1}1
2
3通过匹配方法体开始标记`(\s+)\{`和结束标记`\1\}`前面的空格判断方法体的开始和结束位置.匹配效果如下图:

这样就可以匹配到如下所示的代码:
public static String oneArg(String arg1)
{
//从剪贴板获取文本
String text=SysClipboardUtil.getSysClipboardText();
// 删除空行
text = text.replaceAll(“(?m)^\s$(\n|\r\n)”, “”);
switch (arg1)
{
//省略…
}
return text;
}
public static String noArg(String text)
{
// 删除无用的空行
text = text.replaceAll(“(?m)^\s$(\n|\r\n)”, “”);
return text;
}1
2## 新的问题 ##
好的现在又引入了新的问题,如果是下面的代码:
public void setName(String name) {
this.name = name;
}1
2
3上述正则将无法匹配到.因为方法体开始符`{`前面只有一个空格,而结束符前面却有4个空格。
嗯,这个事情暂且搁置.就让自己手动现在使用哪种方式吧.
## 匹配getter setter方法 ##
public\s+\w+\s+(?:set|get)\w+((?:\,?\s\w+\s+\w+))(\s+){(?:(?:\n|\r\n).)?\1}
```
匹配效果如下图图所示:
正则表达 匹配方法
- 本文链接: https://tongsiying.github.io/blog/e8358348/
-
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
如果图片无法显示: https://lanlan2017.github.io/blog/9a6c2fdf/