0

我正在寻找正则表达式,它可以让我使用搜索替换使用 Notepad++ 向文件中的所有 java 方法添加 2 行代码

前:

  public void startProcessing() {
      ..............
      ..............
               }

后:

公共无效开始处理(){

  logger.info( "Entering into startProcessing" );
  ..............
  ..............
  logger.info( "Exiting startProcessing" );
           }

这可能吗,如果是的话,任何人都可以帮助我编写代码......或指导我以任何其他可能的方式来做到这一点。

4

1 回答 1

2

从“坏消息”开始,除非您有更好的指纹来匹配,否则您将无法插入“退出”行。使用您当前的代码示例,您可以匹配的最好的是},并且作为一个疯狂的猜测,您的代码中可能有很多右花括号。

插入“起始”行是可行的,但稳健性取决于您的输入。

如果您总是希望替换与示例代码中相同的行(或相同的格式但不同的函数名称),您可以在 Find+Replace 菜单中执行以下操作:

寻找:

public void startProcessing() {

代替:

public void startProcessing() {\n\tlogger.info("Entering into startProcessing");

搜索模式:Extended

如果您想用非硬编码的函数名称动态地进行替换,您可以尝试以下操作:

寻找:

(public void )([a-zA-Z0-9_$]+)(.*)

代替:

\1\2\3\n\tlogger.info\("Entering into \2"\);

搜索模式:Regular Expression

这种“动态”方法将需要您搜索的任何方法都以相同的格式声明,public void functionName.... 我已将其用作[a-zA-Z0-9_$]函数名称的字符集,但您可以根据需要对其进行调整。

UPDATE(忽略 get/set 方法)
要忽略 get/set 方法,例如getFieldValueUnits()or setFieldValueUnits(int val),您可以使用以下Find值(与Replace上述相同):

(public void )(?!get|set)([a-zA-Z0-9_$]+)(.*)

这将匹配所有不以getor开头的函数set(并且声明为public void,如上所述)。

于 2012-12-13T06:13:05.950 回答