结构化搜索和替换
传统的搜索过程不会考虑源代码的语法和语义。 即使您使用正则表达式,IntelliJ IDEA 仍然将您的代码视为常规文本。 结构化搜索和替换 (SSR )操作允许您根据代码结构在代码中搜索特定的代码模式或语法结构。
IntelliJ IDEA 根据您创建的 search templates和您应用的 conditions查找和替换源代码片段。
结构性地搜索目标
请前往 打开 Structural Search 对话框。
在 Structural Search 对话框中,执行以下操作之一:
从头开始创建您自己的模板.
从模板列表中选择 草稿模板。
在编辑器区域中,输入表示您代码的代码模板(
$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 会在编辑器中即时突出显示所找到的代码。
Structural Search 对话框显示了所选模板和模板中使用的过滤器的值。 您可以编辑现有的过滤器或添加新的 条件 ,例如,添加一些正则表达式或一个 script constraint。 将文本光标放置在代码变量处,并使用筛选区域管理筛选器。

例如,让我们为
$Field$变量添加一个条件。在筛选区域,点击
以添加新条件。 例如,如果您需要添加正则表达式,请选择 文本。 您还可以根据您的变量添加 其他条件。
在打开的字段中输入您的条件。
例如,让我们输入以下正则表达式:
\b[A-Z].*?\b
在这种情况下,当您在 区分大小写 对话框中选中 Structural Search 复选框时,IntelliJ IDEA只会搜索包含大写字符的字段。
还请注意,根据选择的语言,有不同的附加选项可用。
例如,检查以下选项:
语言 :使用列表选择搜索中应包含的文件类型。 在我们的例子中,它是 Java。
目标 :在选项列表中,选择要搜索的条目。 在我们的情形中是
字段.
递归 :如果选中此复选框,IntelliJ IDEA 将执行递归搜索,并且所有嵌套项都将包含在结果中。 例如,当您搜索方法调用时,启用 递归 选项,IntelliJ IDEA 将在
foo(foo(foo()))中找到嵌套的方法调用。 如果禁用 递归 选项,只会找到外部方法调用。注入的代码 :如果选中此复选框,注入的代码(如 HTML 代码中注入的 JavaScript 或 Java 中注入的 SQL)将成为搜索过程的一部分。
区分大小写 :如果选中此复选框,搜索结果将匹配搜索目标的大小写。
指定搜索位置:在项目、模块、目录或自定义范围内。
点击 查找。
IntelliJ IDEA 会在 查找 工具窗口中显示结果。

您可以通过点击 从模板创建检查 在 查找 工具窗口中将新创建的搜索模板作为自定义模板添加到 structural search inspections中,稍后可以用它来检查您的代码。
替换一个目标结构
在主菜单中,前往 。
如果您需要为替换模板中的变量添加过滤器,请将文本光标放在相关变量处,并使用过滤器区域来管理过滤器。
在过滤器区域中,根据您选择的 过滤器 ,指定条件。
例如,我们拿一个变量
$Field$,然后我们 搜寻并添加一个条件,以将找到的模板替换为小写字符。让我们将变量
$Field2$命名,并添加以下过滤器 脚本 ,这基本上是一个 Groovy 脚本:Field.name.toLowerCase()。
要缩小替换结果,请选择以下选项:
缩短完全限定名称 - 将完全限定类名替换为简短名称和导入。
重新设置格式 - 会自动格式化替换的代码。
使用 static import - 在可能的情况下使用静态导入进行替换。 例如,如果选择此选项,对静态方法的调用
Math.abs(i)将变成abs(i)。
指定必要选项后,点击 查找。 IntelliJ IDEA 在 查找 工具窗口中显示结果。
在 查找 工具窗口中,您可以进一步处理结果,逐一替换找到的项目,或一次性替换所有项目,或预览您潜在的更改。
您还可以将替换模板添加到 结构化查找检查中,并将其用作代码的快速修复。

由于我们的替换,所有大写字符都被转换为小写字符。

共享搜索模板
您可以通过导出或导入搜索模板与同事共享。
在 Structural Search 对话框 中, 创建一个新的搜索模板或使用现有的模板。
要导出模板,请点击
。 IntelliJ IDEA 将模板的 XML 表示添加到剪贴板(按 Ctrl+Shift+V 以查看剪贴板内容)。 您可以在聊天、电子邮件或论坛中与其他开发者共享此表示形式。
要导入模板,请从任何地方(电子邮件、聊天或论坛)复制(Ctrl+C )共享的 XML 代码,并在 Structural Search 对话框中点击
。 IntelliJ IDEA 接受 XML 代码表示并将其转换为模板,包括变量和作用域(如果存在)。