简要
该函数,
1.若想自动脱敏,可以仅传入数据即可
2.若想通过自己传入位置脱敏,又不想报错,可以传入数据,开始位置,结束位置即可
3.若想通过自己传入位置脱敏,且不和规数据不脱敏,代码报错,可以基于2,传入false
代码
package com.bigdata.hive.udf;
import com.bigdata.hive.Tools.StringTools;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.util.regex.Pattern;
/**
* 自定义UDF函数
* 功能:判断传入的字符是否为空
* null NULL \t \r\n \n "" " " 全部视为空值
*/
@Description(
name = "udf_sjtm_place",
value = "_FUNC_('hello',1,2,false) - Returns h****llo ",
extended = "Example:\n true : Ignore exception ,you can no write\n > SELECT _FUNC_(\'hello\',1,10) FROM dual LIMIT 1;\n return h**** "
)
public class UdfSjtmPlace extends UDF {
public String evaluate(final String s,int begin ,int end) {
if (StringTools.isNotNull(s) && begin < end && begin<s.length()) {
if(end >s.length() ){
return s.substring(0,begin)+"****";
}else{
return s.substring(0,begin)+"****"+s.substring(end,s.length());
}
}
return s;
}
public String evaluate(final String s,int begin ,int end,boolean flag) {
if(flag== true){
return this.evaluate(s,begin,end);
}else {
return s.substring(0,begin)+"****"+s.substring(end,s.length());
}
}
public String evaluate(final String s) {
switch (s.length()){
case 0:
return "****";
case 1:
return "****";
case 2:
return s.substring(0,1)+"*****";
case 3:
return s.substring(0,1)+"****"+s.substring(s.length()-1,s.length());
case 4:
return s.substring(0,1)+"****"+s.substring(s.length()-1,s.length());
case 5:
return s.substring(0,1)+"****"+s.substring(s.length()-1,s.length());
case 6:
return s.substring(0,1)+"****"+s.substring(s.length()-1,s.length());
case 7:
return s.substring(0,1)+"****"+s.substring(s.length()-1,s.length());
default:
return s.substring(0,3)+"****"+s.substring(s.length()-4,s.length());
}
}
public static void main(String[] args) {
String s ="620121187502135416";
System.out.println("值为: "+new UdfSjtmPlace().evaluate(s ));
}
}
单参数运行效果:new UdfSjtmPlace().evaluate(s )
三个参数运行效果:new UdfSjtmPlace().evaluate(s,3,100 )
四个参数运行效果图:new UdfSjtmPlace().evaluate(s,3,100,false )