IntelliJ IDEA 2025.3 Help

使用结构化搜索和替换

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

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

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

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

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

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

    现有模板对话框

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

    查找工具窗口:搜索结果

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

更改预定义模板

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

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

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

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

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

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

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

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

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

  1. 在 结构搜索 对话框中,点击 工具图标 并选择 现有模板。

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

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

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

    现在搜索结果不仅会包括 print,还会包括 println 和 printf。

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

    为参数添加计数修饰符

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

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

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

  1. 在 结构搜索 对话框中,为 $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. 我们可以在 检查结果 工具窗口中查看我们的结果。

    检查结果
2026年 1月 23日