力扣——831. 隐藏个人信息(Java、JavaScript、python3实现耗时最短)
- 隐藏个人信息
给你一条个人信息字符串 s ,可能表示一个 邮箱地址 ,也可能表示一串 电话号码 。返回按如下规则 隐藏 个人信息后的结果:
电子邮件地址:
一个电子邮件地址由以下部分组成:
一个 名字 ,由大小写英文字母组成,后面跟着
一个 ‘@’ 字符,后面跟着
一个 域名 ,由大小写英文字母和一个位于中间的 ‘.’ 字符组成。‘.’ 不会是域名的第一个或者最后一个字符。
要想隐藏电子邮件地址中的个人信息:
名字 和 域名 部分的大写英文字母应当转换成小写英文字母。
名字 中间的字母(即,除第一个和最后一个字母外)必须用 5 个 “*****” 替换。
电话号码:
一个电话号码应当按下述格式组成:
电话号码可以由 10-13 位数字组成
后 10 位构成 本地号码
前面剩下的 0-3 位,构成 国家代码
利用 {‘+’, ‘-’, ‘(’, ‘)’, ’ '} 这些 分隔字符 按某种形式对上述数字进行分隔
要想隐藏电话号码中的个人信息:
移除所有 分隔字符
隐藏个人信息后的电话号码应该遵从这种格式:
“--XXXX” 如果国家代码为 0 位数字
“+---XXXX" 如果国家代码为 1 位数字
"+---XXXX" 如果国家代码为 2 位数字
"+--**-XXXX” 如果国家代码为 3 位数字
“XXXX” 是最后 4 位 本地号码
示例 1:
输入:s = “LeetCode@LeetCode.com”
输出:“l*****e@leetcode.com”
解释:s 是一个电子邮件地址。
名字和域名都转换为小写,名字的中间用 5 个 * 替换。
示例 2:
输入:s = “AB@qq.com”
输出:“a*****b@qq.com”
解释:s 是一个电子邮件地址。
名字和域名都转换为小写,名字的中间用 5 个 * 替换。
注意,尽管 “ab” 只有两个字符,但中间仍然必须有 5 个 * 。
示例 3:
输入:s = “1(234)567-890”
输出:“--7890”
解释:s 是一个电话号码。
共计 10 位数字,所以本地号码为 10 位数字,国家代码为 0 位数字。
因此,隐藏后的电话号码应该是 “--7890” 。
示例 4:
输入:s = “86-(10)12345678”
输出:“+--**-5678”
解释:s 是一个电话号码。
共计 12 位数字,所以本地号码为 10 位数字,国家代码为 2 位数字。
因此,隐藏后的电话号码应该是 “+--**-7890” 。
Java代码1:
class Solution {
public String maskPII(String S) {
return (S.indexOf("@")!=-1)?maskEmail(S):maskPhone(S.toCharArray());
}
public String maskEmail(String s){
StringBuilder sb = new StringBuilder();
int index = s.indexOf("@");
sb.append(s.charAt(0)).append("*****").append(s.charAt(index-1)).append(s.substring(index));
return sb.toString().toLowerCase();
}
public String maskPhone(char[] chs){
int cnt = 0;
StringBuilder sb = new StringBuilder();
for(int i=chs.length-1;i>=0;i--){
char ch = chs[i];
if(Character.isDigit(ch)){
if(cnt == 4 || cnt == 7 || cnt == 10)
sb.append("-");
if (cnt < 4)
sb.append(ch);
else
sb.append("*");
cnt++;
}
}
if(cnt>10){
sb.append('+');
}
return sb.reverse().toString();
}
}
Java代码2:
class Solution {
public String maskPII(String s) {
int in = s.indexOf('@');
if(in>0){
s= s.toLowerCase();
StringBuilder sb = new StringBuilder(s);
sb.replace(1,in-1,"*****");
s=sb.toString();
}else{
s=s.replace("(","");
s=s.replace(")","");
s=s.replace("+","");
s=s.replace("-","");
s=s.replace(" ","");
int l=s.length();
if(l==10){
s="***-***-"+s.substring(6);
}
if(l==11){
s="+*-***-***-"+s.substring(7);
}
if(l==12){
s="+**-***-***-"+s.substring(8);
}
if(l==13){
s="+***-***-***-"+s.substring(9);
}
}
return s;
}
}
JavaScript代码:
/**
* @param {string} S
* @return {string}
*/
var maskPII = function(S) {
if(S.match('@')){
S = S.toLowerCase();
const reg = /^[a-z]+[^@]/g;
let name = S.match(reg)[0].split('');
name = [name[0],'*','*','*','*','*',name[name.length - 1]].join('');
S = S.replace(reg,name);
return S;
}
S = S.replace(/\(|\)|\s|\-|\+/g,'');
const { length } = S;
let lastFour = S.slice(-4);
let basicStr = `***-***-${lastFour}`;
let remainder = length % 10;
if(!remainder) return basicStr;
let str = '+'.padEnd(remainder+1,'*');
return `${str}-${basicStr}`
};
python3:
class Solution:
def maskPII(self, S: str) -> str:
i = S.find('@')
if i >= 0:
return S[0].lower() + '*****' + S[i - 1: ].lower()
else:
s = re.sub('[+() -]', '', S)
return '***-***-' + s[-4: ] if len(s) == 10 \
else '+' + '*' * (len(s) - 10) + '-***-***-' + s[-4: ]
作者:KJ.JK
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习
相关文章
- java解析xml方法_详解Java解析XML的四种方法
- fileinputstream java_Java FileInputStream close()方法
- Java 反射:通过 getField() 设置公共全局变量
- java高级工程师面试情景题_Java高级工程师面试题III
- Java进阶:java开源商城系统源码
- js 比java还难_javascript与java哪个难「建议收藏」
- Java商城源码最好用的java商城电商系统之一
- java 堆栈的声明_Java 堆栈[通俗易懂]
- java extends runtimeexception_Java中RuntimeException和Exception的区别
- java.math.biginteger cannot be cast_java the selection cannot be
- java mencoder_mencoder java linux[通俗易懂]
- 【说站】java同步方法的使用
- 【说站】java之JDK注解的介绍
- 【测开技能】Java语言系列(十四)for循环
- Deep Java Library_java atomicinteger
- 武汉java公司排名_武汉十大it培训机构
- java解释器虚拟机-Java代码如何运行在Java虚拟机中
- java和python写抢红包算法代码
- Java NIO SocketChannel套接字通道详解编程语言
- 缓存解决Java程序中Redis过期缓存问题(redisjava过期)
- 基于Java的轻量级异步编程框架
- Linux系统中下载Java的方法(linux下java下载)
- Java Redis实例学习与应用(java redis实例)
- Java连接Oracle实现简单快捷的数据传输(java联结oracle)
- 数据库Java编程修改Oracle数据库的实践(java修改oracle)
- 使用JavaScript实现Java的List功能(实例讲解)
- java设置session过期时间的实现方法
- javascript中实现兼容JAVA的hashCode算法代码分享