IntelliJ IDEA 2025.1 Help

使用结构化搜索和替换

结构化搜索和替换是一种强大的工具,可以搜索特定的代码模式并添加修饰符以缩小搜索范围。

在本教程中,我们将搜索字段声明,添加修饰符,并基于修改后的模板创建代码检查。 如果您愿意,您可以在我们深入探讨之前观看相关视频。 视频可能会略有不同,因为这是为较早版本的 IntelliJ IDEA 制作的。

让我们打开 结构化搜索 对话框,并使用一个现有模板进行搜索。

使用现有模板(字段声明)

  1. 在主菜单中,前往 编辑 | 查找 | 结构化搜索

  2. Structural Search 对话框中,在 Java | 基于类 节点下,选择 类的所有字段 ,这将查找所有字段声明并点击 查找

    现有模板对话框

    因此,在 查找 工具窗口中,IntelliJ IDEA 会显示我们 Java 代码中声明的所有字段。

    查找工具窗口:搜索结果

现在,让我们回到结构搜索对话框来稍微修改一下预定义模板。 顺便说一句,您可以使用 随处搜索 窗口来访问搜索对话框。

更改预定义模板

  1. 请按 Shift 两次以打开 随处搜索 窗口。

  2. 开始输入搜索查询,点击搜索结果列表中的 结构化搜索 以打开我们的结构化搜索对话框。

    全局搜索窗口
  3. Structural Search 对话框中,我们通过在 final 变量之前添加 $Field$ 来更新模板,只搜索最终字段。 请注意,对话框中支持代码补全。

    结构化搜索对话框中的代码补全
  4. 我们将递归地搜索我们的代码,匹配大小写,并且只在 Java 类型文件中搜索。

    结构搜索对话框:缩小搜索范围
  5. 当我们更改范围时,IntelliJ IDEA 可以立即通知您在指定范围内是否可以找到代码模式。

    结构搜索对话框:模块范围
  6. 请在 查找 工具窗口中检查结果。

    查找工具窗口:最终字段搜索结果

通过结构搜索,我们可以进行一些有趣的搜索。 让我们选择另一个现有模板(方法调用 )作为我们的例子。

使用现有的模板(方法调用)

  1. Structural Search 对话框中,点击 工具图标 并选择 现有模板

  2. 打开现有模板列表,然后在 方法调用 节点下选择 表达式 模板。

    现有模板对话框:方法调用
  3. 如果我们现在运行搜索,我们的代码中的所有方法调用都会出现在结果中。 因此,我们应当稍微修改我们的模板并使用修饰符,以便更具体地说明我们在寻找什么。 让我们添加一个修饰符 文本 并定义一个名为 print 的方法。 我们会查找调用一个名为 print 的方法。

  4. 我们可以添加一个正则表达式,例如,查找所有包含 print 的方法调用。 为此,让我们切换 printprint.*

    现在搜索结果不仅会包括 print,还会包括 printlnprintf

  5. 让我们更改搜索模式,以便结果只显示仅接受单个参数的方法。 点击 $Parameter$ 变量并添加计数修饰符 min=1max=1

    为参数添加计数修饰符

    在这种情况下,我们的搜索结果会更少。

假设我们正在进行此搜索,以用日志调用替换所有这些方法调用,而不是 System.out。 这些日志方法只接受字符串类型,不接受其他类型。

首先,让我们找出传递字符串的方法。

  1. Structural Search 对话框中,为 $Parameter$ 变量添加修饰符 类型

    添加类型修饰符字符串
  2. 点击 搜索。 因此,我们看到了一系列只接受文字字符串或类型为 String 的变量的 print 方法。

    “查找”工具窗口:结果

现在让我们进行替换。

替换代码

  1. 请使用 随处搜索 窗口访问 结构化替换

  2. 结构化替换 对话框中,在 替换模板 中添加您想要用来替换搜索结果的代码。 在我们的情形中是 java.util.logging.Logger.getLogger(this.getClass().getName()).fine($Parameter$)

    “结构替换”对话框:替换模式

    点击 查找

  3. 请在 查找 工具窗口中检查结果,并使用替换选项替换所有结果或仅替换选定的结果。

    Find 工具窗口:替换结果

    正如您所见,代码已被更改。

    替换结果

我们可以保存此模板以备日后需要时参考。

保存已修改的模板

  1. 结构化替换 对话框中,点击 工具

  2. 在打开的列表中,选择 保存模板

  3. 让我们添加模板的名称 (打印 String 调用) 并点击 OK

    模板保存在 用户定义 节点下的 现有模板 对话框中。

    保存的模板

    结构化替换 对话框中,我们可以点击 搜索图标 来查看您最近搜索的历史记录,并快速重新运行其中的任何一条。

    最近条目

我们还可以将模板用作检查,因此当我们遇到相同代码时,会看到一个警告,并可以快速替换代码。

创建自定义检查

  1. 查找 工具窗口中,当您获得替换模式的结果时,点击 从模板创建检查

  2. 在打开的对话框中,添加模板的名称 打印 String 调用

    结构搜索检查对话框

    如果您愿意,您可以添加工具提示并点击 OK

  3. 设置 对话框(Ctrl+Alt+S )中,转到 编辑器 | 检查

  4. 检查 页面上,打开 结构化搜索 节点以定位创建的检查。

    检查设置:结构搜索检查

    现在,您可以在编辑器中快速修复代码,或者使用 问题 视图,在那里我们可以检查带有使用新代码替换的建议的警告。

    问题视图

我们可以直接从检查设置中添加自定义结构搜索检查。

从检查 设置中创建自定义检查

  1. 设置 对话框(Ctrl+Alt+S )中,转到 编辑器 | 检查

  2. 检查 页面,选择 结构化搜索 节点并点击 添加结构化搜索替换检查。 我们可以基于搜索模板或替换模板进行检查。 让我们选择 添加替换模板

  3. 结构化替换 对话框中,让我们稍微更改一下搜索模式。 让我们将 类型 修饰符更改为 int 以便我们的 $Parameter$ 变量。

  4. 在替换模式中,让我们调整代码。 java.util.logging.Logger.getLogger(this.getClass().getName()).fine(String.valueOf($Parameter$)),

    更改模式
  5. 在打开的对话框中,让我们添加检查的名称 print int calls 并点击 OK

    检查名称

    新的检查项被添加到 结构化搜索 下,您可以运行它来搜索打印整数的实例。 当找到这样的代码时,我们可以用记录器调用来替换它,并将找到的参数转换成字符串。

我们可以使用其名称单独运行我们的检查。

运行结构搜索检查

  1. Ctrl+Alt+Shift+I 或转到主菜单中的 代码 | 分析代码 | 通过名称运行检查(R)…

  2. 在打开的对话框中,我们输入检查的名称 打印 String 调用

    输入检查名称
  3. 运行 'print String calls' 对话框中,让我们保留默认选项并点击 OK

    检查作用域
  4. 我们可以在 检查结果 工具窗口中查看我们的结果。

    检查结果
最后修改日期: 2025年 4月 24日