我认为这在 Eclipse 中不受支持,但我想找到我声明的每个方法的每个右括号,并在它关闭之前用另外一个代码行替换它。
我试图通过正则表达式“ public.*\}
”或“ public[.\s]*\}
”来查找,但它没有找到单个方法声明。
尽管有些帖子声明 Eclipse 具有多行搜索和替换功能,但使用正则表达式。我认为并非如此。
当正则表达式知道预期的位置时,通常给出的示例仅识别特定的换行符。
这是可能的,但不能使用正则表达式。相反,编写一个小型 Java 程序并添加org.eclipse.jdt.core_3*.jar
到类路径中。plugins/
您可以在Eclipse 安装文件夹中找到此 JAR 。
JAR 包含 Eclipse 编译器,该编译器具有将 Java 源代码转换为AST的 API 。遍历 AST,对所有方法进行区域设置并使用 AST 节点添加新代码。有一些方法可以将 AST 转换为字符串。使用它来生成新的源代码。
如果您不知道新的 AST 节点应该是什么样子,请将代码添加到单个方法并打印结果。
另一种选择是使用AOP,它允许您在运行时包装方法。
[编辑]查看org.eclipse.jdt.internal.corext.refactoring.surround.SurroundWithTryCatchRefactoring
示例中的代码(grepcode 上的源代码)
由于嵌套的,这是不可能的{}
。正则表达式无法处理嵌套。
尝试在every前面插入一个新行}\s*public
。
您可以像这样匹配和替换嵌套括号:
搜索模式:({(?:{?(?:\s|.)}?)*?)(})
替换模式:$1\t//我的代码\n$2
但是,这在 Eclipse 中不起作用,而在 Java 中起作用。