引言:高效开发?
我们知道,代码开发是个不断进步,不断升华自我的过程,但就目前的工作中,有太多太多我们认为是重复工作的工作。我们以为,工作的重复只有第一遍和第二遍才是对于我们有意义的,它能帮助我们掌握和熟练新的知识。
但是重复的次数多了,工作也就纯粹是工作了,就像你家门口得那两棵槐树一样,一棵是槐树,另一棵还是槐树。
所以我们需要利用我们现有的知识和还未拥有的知识,去优化甚至减少各种各样的重复工作。所以我们会在这里记录各种可以让我们的工作变得高效的骚操作。
当然,如何在高效工作和高负担工作量之间进行权衡,就不在我们这次的讨论范围啦~
高效技巧1:如何快速在每行末尾添加 ","----正则表达式
当你在CV操作的时候,是不是往往会遇到需要对数据进行相关批量操作的时候,
这个时候,数据量小还可以手动操作,但如果数据量大,就非常郁闷了,所以我们需要更高效的方法----正则表达式 + 超级笔记本的正则表达式功能
下面是具体案例:
如何快速在每行末尾添加 ","?
步骤:
1. 打开替换界面
2. 选择正则表达式模式
3. 输入相关表达式和替换内容
这里简单说明一下,^ 代表每行开头, $ 代表每行结尾 ,其余表达式可自行询问度娘
4. 点击全部替换
完成.......
其余类似问题可操作
高效技巧2:如何对文本内容进行变量替换?
这次的文本案例像这样:
{
label: intl.get(`${promptCode}.model.processStatus`).d('创建日期'),
name: 'processStatus',
type: 'string',
},
原文本有着非常多这样格式的大括号,需求非常简单:如何把name:'后的字符串替换成model.后的字符串?
下面是解决思路:
思路一:
1. 利用notepad++记事本的正则表达式替换功能
2. 文本匹配的正则表达式:
1). 查找字符串model.后面,字符串`前面的字符串 :
(?<=model.).*(?=`)
2). 查找字符串name: '后面,字符串'前面的字符串 :
(?<=name: ').*(?=')
3. 替换失败:原因是替换输入框里的正则表达式被当成了字符串
4. 待解决。。。。。。尝试其他解决方案
思路二:
利用按键精灵PC端软件进行鼠标键盘的重复性操作
(因为文本存在一定的规律性,所以这种办法是可以的,并且非常简单,但是我们不推荐这种方法,因为这样只是从一种cv操作到了另一种cv操作)
思路三:
因为原始文本是json类型,所以可以用js进行相关操作,但作为一个java后端开发......我表示不太会js.....QAQ
于是乎我想到了利用java解决这个问题
思路四(最终思路):
用java的正则匹配加io流进行操作,大概思路如下:
1. 读取文本进入io流,命名为newFile
2. 利用正则表达式匹配newFile中所有model.后面的字符串,并作为数组保存到ArrayList中
3. 利用正则表达式匹配newFile中所有name: '后面的字符串,并依次替换成ArrayList中的数据
4. 将替换后的文本输出并保存
我们想了想,既然我们这个脚本的作用对象是代码,那么新建一个文本文件就显得有些多余了,于是我们将上面的思路进行简化并编写代码,以下是我写的代码最初版:
//批量处理脚本
public static void main(String[] args) {
//1. 字符串定义
//请将要输入的文本粘贴在下方(目前没有想到什么输入的好方法,后续优化.....)
String str = "{\n" +
"label: intl.get(`.model.startDate`).d('开始日期'),\n" +
"name: 'startDate',\n" +
"type: 'dateTime',\n" +
"},\n" +
"{\n" +
"label: intl.get(`.model.endDate`).d('结束日期'),\n" +
"name: 'endDate',\n" +
"type: 'dateTime',\n" +
"},";
//2.字符串修改
//2.1定义匹配规则 获取需要的数据
Pattern pattern =Pattern.compile("(?<=model.).*(?=`)");
Matcher matcher = pattern.matcher(str);
ArrayList list = new ArrayList();
//字符串查找
while (matcher.find()){
list.add(matcher.group());
}
//2.2定义匹配规则 修改数据
//贪婪匹配不可,需要改为懒惰
Pattern pattern1 = Pattern.compile("(?<=name: ').*?(?=')");
Matcher matcher1 = pattern1.matcher(str);
int i=0;
StringBuffer result = new StringBuffer();
while (matcher1.find()){
//依次替换
matcher1.appendReplacement(result, (String)list.get(i));
i++;
}
System.out.println(result);
}
到此,问题解决。
附上代码的github链接,如果可以对它进行优化,欢迎留言评论,或者也可以直接在github进行fork(虽然我也没有用过)
github.com/raxcl/utils
经过一系列复杂的过程,目前已经将脚本更新为可视化图形界面脚本,欢迎下载体验