在 Android 开发中搜索跟替换是非常高频的操作,我们使用 Ctrl(+Shift)+F 跟Ctrl(+Shift)+R,这些快捷键已经被我们用到烂了吧。这种比较大的缺点就是只能搜索/替换固定的关键字,当我们想要搜索/替换某个【模板代码】的时候,就起不了作用了。
举个列子:
比如我们在对代码的异常进行捕获的时候,为了贪图方便,我们只是简单的打印。
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
try {
mCardAdapterHelper.onBindViewHolder(holder.itemView, position, getItemCount());
holder.mImageView.setImageResource(citys[position % 4]);
} catch (Exception e) {
e.printStackTrace();
}
}
这时候项目经理要求我们捕获的异常的时候,将异常日志进行收集然后上传到后台。这时候,我们只要把相应的代码添加进去就可以,这个当然简单。
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
try {
mCardAdapterHelper.onBindViewHolder(holder.itemView, position, getItemCount());
holder.mImageView.setImageResource(citys[position % 4]);
} catch (Exception e) {
AppLogManager.getLogManager().write(e.printStackTrace());
e.printStackTrace();
}
}
但是,如果这样的代码充斥着整个项目,你只是用 Ctrl(+Shift)+F 跟Ctrl(+Shift)+R 定位到相对应的代码然后一个一个整改,耗时时间跟精力就太长了。
这样的情况你就可以使用结构化搜索跟替换了。
使用
Edit -> Find -> Search/Replace Structurally
然后你会看到这么一个界面:
- ① 保存模板:将你自定义的模板进行保存,下次使用的时候可以直接导入
- ② 编辑模板中的变量
- ③ 查看历史记录
- ④ 从已有模板中导入
- ⑤:编辑搜索模板
- ⑥:编辑替换模板
我们可以在 ⑤ 跟 ⑥ 里面直接进行编辑模板,也可以从 ④ 里面导入已有的模板。如果是自定义编辑的模板,可以使用 ① 进行保存,如果对变量还有要求的,可以在②里面里面编辑条件。
导入模板
通过操作 ④ 即可导入已有的模板代码:
导入完成之后,点击 find 即可搜索到相对应的代码
选择 replace All/replace select 即可替换。
自定义编辑模板
自定义我们需要用
来替换需要模糊搜索的代码,不需要模糊搜索的,直接用源码即可。
比如:
switch($Condition$) {
$Statement$;
}
这个就搜索所有的switch…case代码。
但是需要注意一点:定义的变量需要表示代码块或者多行代码情况下,需要通过 ② 修改成元素最少出现1次,并且最大是无上限。至于 ② 里面的操作下面会讲解。
编辑变量
让我们看下②里面的操作
在左边区域,显示刚才我们在面板 ⑤ 里面定义的代码变量。我们可以通过右边可以进行这些变量进行约束。
Text constraints:
- Text/regular 在这输入框里面你可以输入正则表达式对该变量进行约束。
- Invert condition:对正则进行反转
- Apply constraint within type hierarchy :会对层级结构也会进行搜索。
- Whole words only:会对全部的文本进行搜索,包括注释。
Occurrences count:
- Minimum count:Minimum count:元素的最小数量
- Maximum count:元素的最大数量
- Unlimited:元素数量无限制
这个最大小值,表示就是模糊搜索命中的时候,这个变量表示多少元素的数量。
如果变量表示的是多行代码,最小值需要配置1个,最大值配置成无限。如果你没把握,那么就配置成无限制吧。
后面几个配置用得不是很多,所以就不讲了。(好吧,其实我也不大懂。)
好了,关于结构化结构化搜索跟替换就见到这里了。