IntelliJ IDEA是一款非常强大的Java IDE,当然现在也支持多种语言,由JetBrains公司开发。IntelliJ IDEA在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。
使用IDEA的感觉就是,一开始可能不习惯(与Eclipse的设计思想完全不同),但是越用就会发现越强大!这里介绍IDEA的正则查询替换和纵向编辑两个非常强大的功能。
1. 正则查找替换 正则查找替换即:支持使用正则表达式来匹配或替换文本,并且可以通过<code>$n</code>来访问正则的分组。
举个例子:我想要将Mapper取值表达式后边的jdbcType=XXX去掉,怎么做?没有正则,那么我们只能使用多次替换。使用正则,那么我们只需将#{xxx,jdbctye=XXX}部分查询出来,并且按分组替换即可,如下图所示:
在IDEA按快捷键CTRL+R开启查找替换功能,输入正则{(w*),(w*=w*)},此时IDEA会自动高亮匹配的内容。然后再替换框中输入{},即替换后的内容保留匹配正则的第一个分组,此时,IDEA会有一个灰色的pop框来告诉你,该内容会被替换成什么内容(见图中的#{rank})。然后,直接点击replace all替换全部替换即可,也可以使用exclude和replace一个个排除和替换。
正则替换功能适用于需要在某些有规律的内容上进行编辑,只要正则能够匹配到这部分内容。
2. 纵向编辑 纵向编辑是我个人非常喜欢的功能之一,其实很多编辑器(例如VIM、SUBLIME)都支持。在IDEA中,要开启纵向编辑,先按住ALT键不松开,然后按住鼠标竖向移动选择即可。
同样举个简单的例子:将设我从某些地方拷贝了一串属性,现在想要将其定义到具体的Class属性中,如图所示:
假设字段类型都是String,我们需要做以下几步:
1、将首字母变为小写
2、在属性前边添加private String
3、在属性后边添加分号
我们看看使用纵向编辑怎么做:
如上图所示,先纵向选择过后,按HOME键,将光标跳转每一行首,然后SHIFT+→选择每一行首字母,再CTRL+SHIFT+U将选中部分转为大小写,然后在每一行前边添加内容,完成后按End键将光标跳转到每一行尾,输入分号,结束。整个过程中,光标始终处于纵向编辑状态。
这里用到了几个小技巧:SHIFT+左右箭头,可以选择一个字符;CTRL+SHIFT+左右箭头,可以选择一个单词;HOME和END分别跳转到行首和行尾。
接下来,我们看一个实际的综合使用这两个功能的例子。
3. 综合实例 3.1. 需求 我从API文档拷贝了请求API的内容片段,现在,我需要为这些字段建立Class,内容片段如下:
"ParkOrder_ID": 131391,//订单ID "ParkOrder_OrderNo": "20170209150056708-B11110",//订单号码 "Parking_ID": 1,//停车场ID "Parking_Enable": 1,//停车场状态 "Parking_Key": "e0b3ca87caf3a415bb3b3f52ca8aa795",//停车场编码 "Parking_Name": "城市明珠停车场1",//停车场名字 "Parking_FreeTime": 2,//首次免费分钟 "Parking_FreeTimeout": 2,//超时免费分钟 "ParkOrder_CarNo": "粤B11110",//车牌号码 "ParkOrder_CarType": "3651",//停车缴费类型 "CarType_No": "3651",//车辆类型 "CarType_Name": "临时车",//车辆类型名字 "ParkOrder_EnterTime": "2017-02-09 15:00:56",//入场时间 "ParkOrder_EnterGateName": "入口车道1",//入口车道名字 "ParkOrder_EnterOperatorName": "管理员",//入场操作员 "ParkOrder_EnterImgPath": "/OrderImg/e0b3ca87caf3a415bb3b3f52ca8aa795/20170209/20170209150056708-B11110-0.jpg",//图片URL "ParkOrder_OutTime": null,//出场时间 "ParkOrder_OutGateName": null,//出口车道名字 "ParkOrder_OutOperatorName": null,//出口操作员名字 "ParkOrder_OutImgPath": null,//出口图片URL "ParkOrder_TotalAmount": null,//总金额 "ParkOrderStatus_No": "200",//停车状态200为 车辆入场 201为车辆出场 202为自动关闭 "ParkOrderStatus_Name": "已入场",//状态中文名字 "ParkOrder_Lock": 0,//车辆是否锁定 "WXUser_ID": null,//微信ID "WXUser_Openid": null,//微信openid "WXUser_Nickname": null,//微信nikename "WXUser_Headimg": null,//头像url "PayOrder_Status": "未支付",//支付状态 "PayOrder_PayedMoney": 0.0//支付金额 ...