你的选择不止一个(逻辑 || sql)正则过滤数据
最初研究的目的也是为了方便做报表,数据是最为重要的东西,但是当你返回数据的时候会有杂乱的字符存在其中,导致拿到了所有的数据还有你意想不到的数据(懂的都懂 - -).
方法一(逻辑过滤)
字符过滤,我们可以使用正则去过滤掉不需要的字符,从而拿到想要的结果如下:
//因为是递归过滤,所以在大数据筛选的时候也会影响效率,递归毕竟也是循环
public List<FinfModBean> cleanTextDate(FoodBean foodBean) {
List<FinfModBean> fBeanList =new ArrayList<FinfModBean>();
//结果集
List<FinfModBean> finfModBeans = finfModMapper.cleanTextDate(null);
if (finfModBeans.size()>0){
//此处使用的是stream
finfModBeans.stream()
.forEach(bean -> {
FinfModBean fBean =new FinfModBean();
//---------------------------------------------------正则校验点开始-------------------------------------------------------------
//过滤字符表 字符表数量我只选了最基础的 比较特殊的字符这里面没,补不足的地方可以去度娘搜下
String regEx="[A-Za-z`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
//真正过滤的地方 空格就用trim()去除了一下
String domeFind = bean.getFindName().replaceAll(regEx, "1").trim();
//----------------------------------------------------正则校验点结束------------------------------------------------------------
fBean.setId(bean.getId());
fBean.setFindName(domeFind);
fBeanList.add(fBean);
});
}
-------------方法分隔符---------------
方法二(sql过滤)
有时候数据的清理在逻辑方面处理可能太麻烦,所以我们只好另辟蹊径,之前我经常用sql脚本的方式去执行数据清理替换,然后再返回成新的数据集合返回
#原数据 select find_name from find_mod;
#将数据中的指定字符替换 单个字符替换 select regexp_replace(find_name, '7','') find_name from find_mod;
此处我将字符为7的替换成了空字符
#数组集替换
#regexp_replace(1,2,3,4,5,6) 括号内的数字为填充位置
#语法说明第二个字段替换集合:[x,x,x,x,x] 这个集合类似于字符表单,有需要替换或者验证的都可以放入其中,但是要注意格式 #语法说明:1:字段 2:替换的字段 3:替换成什么 4:起始位置(默认从1开始) 5:替换的次数(0是无限次) 6:i不区分大小写 ,c区分大小写 select regexp_replace(find_name, '[A-Z]','9',1,0,'c') find_name from find_mod;
开启大小写区分就可以辨认替换数据列中的字符
说明:
正则表达式不仅仅有此功效,其中电话验证替换,身份证验证替换,等等,还有很多
Java正则表达式学习: 因为正则表达式是一个很庞杂的体系,此例仅举些入门的概念,更多的请参阅相关书籍及自行摸索。 \\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \r 回车 ('\u000D') \d 数字 等价于[0-9] \D 非数字 等价于[^0-9] \s 空白符号 [\t\n\x0B\f\r] \S 非空白符号 [^\t\n\x0B\f\r] \w 单独字符 [a-zA-Z_0-9] \W 非单独字符 [^a-zA-Z_0-9] \f 换页符 \e Escape \b 一个单词的边界 \B 一个非单词的边界 \G 前一个匹配的结束 ^为限制开头 ^java 条件限制为以Java为开头字符 $为限制结尾 java$ 条件限制为以java为结尾字符 . 条件限制除\n以外任意一个单独字符 java.. 条件限制为java后除换行外任意两个字符 加入特定限制条件「[]」 [a-z] 条件限制在小写a to z范围中一个字符 [A-Z] 条件限制在大写A to Z范围中一个字符 [a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 [0-9] 条件限制在小写0 to 9范围中一个字符 [0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符 [0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集) []中加入^后加再次限制条件「[^]」 [^a-z] 条件限制在非小写a to z范围中一个字符 [^A-Z] 条件限制在非大写A to Z范围中一个字符 [^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符 [^0-9] 条件限制在非小写0 to 9范围中一个字符 [^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符 [^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集) 在限制条件为特定字符出现0次以上时,可以使用「*」 J* 0个以上J .* 0个以上任意字符 J.*D J与D之间0个以上任意字符 在限制条件为特定字符出现1次以上时,可以使用「+」 J+ 1个以上J .+ 1个以上任意字符 J.+D J与D之间1个以上任意字符 在限制条件为特定字符出现有0或1次以上时,可以使用「?」 JA? J或者JA出现 限制为连续出现指定次数字符「{a}」 J{2} JJ J{3} JJJ 文字a个以上,并且「{a,}」 J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存) 文字个以上,b个以下「{a,b}」 J{3,5} JJJ或JJJJ或JJJJJ 两者取一「|」 J|A J或A Java|Hello Java或Hello