# 教程：Kotlin 中的结构化搜索与替换

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

> **TL;DR**
> 必需插件：   Kotlin  （捆绑）

结构化搜索和替换是一种强大的工具，可以在代码中搜索特定模式并以自动化方式进行替换。

在本教程中，您将了解模板和过滤器，修改预定义模板，然后基于它创建代码检查。 开始之前，请确保 [创建一个 Kotlin 应用程序](create-your-first-kotlin-app.html)。

本教程所涵盖的功能绝不是   结构化搜索和替换   的全部功能。 我们的目标是让您开始使用。 之后，您可以探索各种模板、过滤器和选项，并将它们结合起来创建您自己的特定搜索。

对于本教程，我们将使用以下代码：

```KOTLIN
class Point (locationX: Int, locationY: Int) {
    var x: Int = locationX
    var y: Int = locationY
}

open class OpenClass {
    open var openProperty = 0
    open fun display() {
        println("Some text")
        print("More text")
        print(0)
    }
}

```

Procedure: 打开结构化搜索对话框

* 在主菜单中，前往  `编辑 | 查找 | 结构化搜索…` 。

Procedure: 使用现有模板（属性声明）

1. 在   结构搜索  对话框中，从左侧列表中选择   Kotlin  。

2. 展开   基于类  节点并点击   类的所有变量  。

3. 确保   Kotlin   被选中为   语言  。 这样搜索仅适用于 Kotlin 文件。

![仅搜索 Kotlin 文件](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-vals-vars.png)

4. 点击   查找   以运行搜索。 因此，在   查找   工具窗口中，IntelliJ IDEA 显示 Kotlin 类中声明的所有属性。

![在项目文件中找到的匹配项](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-vals-vars-result.png)

Procedure: 重新运行

* 在   结构搜索  对话框中，展开   最近  节点以浏览最近搜索的历史记录，并快速重新运行其中的任何一个。

现在，让我们回到结构搜索对话框来稍微修改一下预定义模板。

Procedure: 更改预定义模板

1. 在   结构搜索   对话框中，通过在  `open`  变量之前添加  `$Field$` ，我们来更新我们的模板以仅搜索未关闭的属性。

![更改类查找模板](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-all-open-fields.png)

> **Tip:**
> 如果我们更改范围，IntelliJ IDEA 将立即通知您是否可以在指定范围中找到代码模式。

2. 点击   查找   并在   查找   工具窗口中检查结果。

![所有开放字段的结果](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-all-open-fields-result.png)

正如您所见，这次搜索使用了过滤器，现在只显示了打开的属性。

通过   结构搜索  ，我们可以运行一些有趣的搜索。 让我们选择另一个现有的模板 (   方法调用  ) 作为我们的示例。 假设我们正在执行此搜索以将所有  `打印`  语句替换为日志调用，并排除所有不以  `字符串`  作为参数的调用。

Procedure: 替换函数调用

1. 在主菜单中，前往  `编辑 | 查找 | 结构性替换` 。

2. 在  `Kotlin | 表达式` 节点下，选择   方法调用  。

![Kotlin 方法调用模板](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-function-calls.png)

3. 如果我们现在运行搜索，结果将包括代码中的所有函数调用。 因此，我们应该稍微修改我们的模板，并使用过滤器来更具体地说明我们在寻找什么。

将文本光标置于  `$MethodCall$` ，然后在右侧窗格中点击   添加修饰符  。 添加一个   文本   筛选器，其值为  `print.*` 。

> **Tip:**
> 使用  `打印`  而不使用通配符只能找到名称完全是  `打印`  的函数调用。 正则表达式将确保结果包含所有在其名称中带有  `打印`  的函数调用，例如  `打印行` 。

![向搜索模板添加文本过滤器](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-replace-1.png)

4. 请将文本光标放在  `$Before$` ，并确保在右侧窗格中唯一的修饰符是  `计数=[0,1]` 。

5. 将文本光标置于  `$Parameter$` ，然后在右侧窗格中点击 ![加号图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.add.svg)。 添加一个   类型   筛选器，其值为  `字符串` 。

![在搜索模板中添加类型过滤器](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-replace-2.png)

6. 在   替换模板  区域，添加替换代码：  `java.util.logging.Logger.getLogger(this.javaClass.getName()).fine($Parameter$)`

![添加替换代码](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-replace-3.png)

7. 请在   查找   工具窗口中检查结果，并使用替换选项选择您要替换的结果。

![替换模板的结果](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-replace-4.png)

如果需要，我们可以保存此模板以供日后使用。

Procedure: 保存模板

1. 在   结构替换  对话框中，点击 ![工具按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.settings.svg)。

2. 在打开的列表中，选择   保存当前模板  。

3. 请指定模板的名称，然后点击   OK  。

![保存替换模板](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-save-template-2.png)

4. 模板已保存到   已保存模板  节点下。

![用户定义模板列表](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-save-template-3.png)

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

Procedure: 创建自定义检查

1. 在   查找  工具窗口中，您会获得替换模式的结果，点击   从模板创建检查  。

![从替换模板创建新的检验](https://resources.jetbrains.com/help/img/idea/2026.3/kotlin-ssr-create-inspection-1.png)

2. 在打开的对话框中，添加检查的名称。 （可选）添加工具提示（悬停在高亮的代码上，会提供更详细的问题描述）。 点击   OK  。

3. 新建的检查会出现在   结构化搜索   节点下的  `设置 | 编辑器 | 检查` 。

> **Tip:**
> 要快速运行 inspection，请选择  `代码 | 分析代码 | 按名称运行检查…` 。 从主菜单中或按 `Ctrl+Alt+Shift+I` (Windows), `⌘ ⌥ ⇧ I` (macOS), `⌘ ⌥ ⇧ I` (IntelliJ IDEA Classic (macOS)), `⌘ ⌥ ⇧ I` (macOS System Shortcuts), `Ctrl+Alt+Shift+I` (XWin), `Ctrl+Alt+Shift+I` (GNOME), `Ctrl+Alt+Shift+I` (KDE), `Ctrl+Alt+Shift+I` (Emacs), `Ctrl+Alt+Shift+I` (Sublime Text), `⌘ ⌥ ⇧ I` (Sublime Text (macOS)), `Ctrl+Alt+Shift+I` (Visual Studio), `⌘ ⌥ ⇧ I` (Visual Studio (macOS)), `Ctrl+Alt+Shift+I` (NetBeans), `Ctrl+Alt+Shift+I` (Eclipse), `⌘ ⌥ ⇧ I` (Eclipse (macOS)))，然后输入检查的名称。

