结构搜索和替换
最后修改时间:2023 年 9 月 7 日传统的搜索过程不考虑源代码的语法和语义。即使您使用正则表达式,IntelliJ IDEA 仍然会将您的代码视为常规文本。结构搜索和替换( SSR ) 操作允许您根据代码结构搜索代码中的特定代码模式或语法结构。
IntelliJ IDEA 根据您创建的搜索模板和应用的条件查找并替换源代码片段。
笔记
目前,IntelliJ IDEA 支持 Java、Kotlin 和 Groovy 的结构搜索和替换。
从结构上寻找目标
- 转到编辑 | 查找| 结构搜索以打开“结构搜索”对话框。 - 笔记- 在“结构搜索”对话框中,您可以快速切换到“结构替换”对话框。点击 - 。 
- 在“结构搜索”对话框中,执行以下操作之一: - 从头开始创建您自己的模板。 - 从模板列表中选择草稿模板。 - 在编辑器区域中,输入代码模板( - $variable$代表您的代码),在对话框的工具栏中单击- 以保存它以供将来使用。您也可以选择将模板保存为检查。  - IntelliJ IDEA 将创建的模板添加到现有模板列表(最近的节点)。 
- 使用现有模板之一作为原型。 - 在可用的现有模板列表中,选择所需的模板。 - 例如,您的代码中有以下字段: - public class MainActivity { public static final String this_is_wrong = "Hello"; public static final String THIS_IS_CORRECT = "world"; }- 让我们在类中查找某个字段。 - 在现有模板列表中,单击“Java”并打开“基于类”节点(因为我们需要类中的字段),因此类模板的字段将是我们的目标。  - 单击“查找”。 - IntelliJ IDEA 会立即突出显示编辑器中找到的代码。 
 
- “结构搜索”对话框显示选定的模板以及模板中使用的过滤器的值。您可以编辑现有的过滤器或添加新的条件,例如添加一些正则表达式或脚本约束。将插入符号放在代码变量处并使用过滤器区域来管理过滤器。  
- 作为示例,我们为 - $Field$变量添加一个条件。- 在过滤区域中,单击 - 添加新条件。例如,如果您需要添加正则表达式,请选择Text。您还可以根据变量添加其他条件。 
- 在打开的字段中,输入您的条件。 - 例如,让我们输入以下正则表达式: - \b[A-Z].*?\b - 在这种情况下,当您在“结构搜索”对话框中选择“匹配大小写”复选框时,IntelliJ IDEA 将仅搜索包含大写字符的字段。 - 另请注意,根据所选语言,有不同的附加选项可用。 - 例如,检查以下选项: - 语言:使用列表选择哪些文件类型应成为搜索的一部分。在我们的例子中,它是Java。 
- 目标:在选项列表中,选择要搜索的项目。在我们的例子中是 - Field)。 
- Recursive:如果选中此复选框,IntelliJ IDEA 会执行递归搜索,所有嵌套项都将包含在结果中。例如,当您搜索方法调用时,启用“递归”选项后,IntelliJ IDEA 将在 - foo(foo(foo())). 禁用“递归”选项后,将仅找到外部方法调用。
- 注入代码:如果选中此复选框,则注入代码(例如 HTML 代码中注入的 JavaScript 或 Java 中注入的 SQL)将成为搜索过程的一部分。 
- 区分大小写:如果选中此复选框,搜索结果将匹配搜索目标的大小写。 
 
- 指定搜索位置:在项目、模块、目录中或自定义范围内。 - 单击“查找”。 - IntelliJ IDEA 在“查找”工具窗口中显示结果。  - 您可以通过单击“查找”工具窗口中的从模板创建检查,将新创建的搜索模板作为自定义模板添加到结构搜索检查中,并在以后使用它来检查您的代码。 - 笔记- 在某些情况下,您可以使用检查来代替结构搜索和替换。例如,通过结构搜索将类替换为接口不会改变用法,并且需要执行多次搜索和替换。在这种情况下,您可以使用抽象类进行接口检查,这也会修改抽象类的用法。 
从结构上替换目标
- 转到编辑 | 查找| 结构上替换。 
- 如果您需要在替换模板中为变量添加过滤器,请在感兴趣的变量处放置插入符号,并使用过滤器区域来管理过滤器。 
- 在过滤器区域中,根据您选择的过滤器,指定条件。 - 例如,让我们获取一个 - $Field$我们搜索的变量,并添加一个条件以将找到的模板替换为小写字符。- 让我们调用我们的变量 - $Field2$并添加以下过滤器脚本,它基本上是一个 Groovy 脚本- Field.name.toLowerCase(): 
- 要缩小替换结果范围,请选择以下选项: - 缩短完全限定名称- 用短名称和导入替换完全限定类名称。 
- 重新格式化- 自动格式化替换的代码。 
- 使用静态导入- 尽可能使用静态导入进行替换。例如,如果选择此选项, - Math.abs(i)则将变为对静态方法的方法调用。- abs(i)
 - 指定必要的选项后,单击“查找”。IntelliJ IDEA 在“查找”工具窗口中显示结果。 
- 在“查找”工具窗口中,您可以进一步处理结果,逐一替换找到的项目,或一次替换所有项目,或者预览潜在的更改。 - 您还可以将替换模板添加到结构搜索检查中,并将其用作代码的快速修复。  - 由于我们的替换,大写字符被切换为小写。  
共享搜索模板
您可以通过导出或导入搜索模板与同事共享。
- 在“结构搜索”对话框(“编辑”|“查找”|“结构搜索”)中,创建一个新的搜索模板或使用现有的模板。 
- 要导出模板,请单击 - 。IntelliJ IDEA 将模板的 XML 表示形式添加到剪贴板(按可查看剪贴板的内容)。您可以通过聊天、电子邮件或论坛与其他开发人员共享此表示。CtrlShift0V - 要导入模板,请从任何地方(电子邮件、聊天或论坛)复制 ( ) 共享 XML 代码,然后在“结构搜索”对话框中单击。IntelliJ IDEA 采用 XML 代码表示并将其转换为包含变量和范围(如果存在)的模板。Ctrl0C 
感谢您的反馈意见!