隐藏个人信息
此博客链接:
隐藏个人信息
题目链接:https://leetcode-cn.com/problems/masking-personal-information/
题目
给你一条个人信息字符串 S,它可能是一个 邮箱地址 ,也可能是一串 电话号码 。
我们将隐藏它的隐私信息,通过如下规则:
1. 电子邮箱
定义名称 name 是长度大于等于 2 (length ≥ 2),并且只包含小写字母 a-z 和大写字母 A-Z 的字符串。
电子邮箱地址由名称 name 开头,紧接着是符号 '@',后面接着一个名称 name,再接着一个点号 '.',然后是一个名称 name。
电子邮箱地址确定为有效的,并且格式是 "name1@name2.name3"。
为了隐藏电子邮箱,所有的名称 name 必须被转换成小写的,并且第一个名称 name 的第一个字母和最后一个字母的中间的所有字母由 5 个 '*' 代替。
2. 电话号码
电话号码是一串包括数字 0-9,以及 {'+', '-', '(', ')', ' '} 这几个字符的字符串。你可以假设电话号码包含 10 到 13 个数字。
电话号码的最后 10 个数字组成本地号码,在这之前的数字组成国际号码。注意,国际号码是可选的。我们只暴露最后 4 个数字并隐藏所有其他数字。
本地号码是有格式的,并且如 "***-***-1111" 这样显示,这里的 1 表示暴露的数字。
为了隐藏有国际号码的电话号码,像 "+111 111 111 1111",我们以 "+***-***-***-1111" 的格式来显示。在本地号码前面的 '+' 号和第一个 '-' 号仅当电话号码中包含国际号码时存在。例如,一个 12 位的电话号码应当以 "+**-" 开头进行显示。
注意:像 "(",")"," " 这样的不相干的字符以及不符合上述格式的额外的减号或者加号都应当被删除。
最后,将提供的信息正确隐藏后返回。
示例 1:
输入: "LeetCode@LeetCode.com"
输出: "l*****e@leetcode.com"
解释:
所有的名称转换成小写, 第一个名称的第一个字符和最后一个字符中间由 5 个星号代替。
因此,"leetcode" -> "l*****e"。
示例 2:
输入: "AB@qq.com"
输出: "a*****b@qq.com"
解释:
第一个名称"ab"的第一个字符和最后一个字符的中间必须有 5 个星号
因此,"ab" -> "a*****b"。
示例 3:
输入: "1(234)567-890"
输出: "***-***-7890"
解释:
10 个数字的电话号码,那意味着所有的数字都是本地号码。
示例 4:
输入: "86-(10)12345678"
输出: "+**-***-***-5678"
解释:
12 位数字,2 个数字是国际号码另外 10 个数字是本地号码 。
题解
首先判断是邮箱还是电话号码,
如果是邮箱的话,则以@分割字符串,然后取@前面的字符串,取第一个字符串中间加上五个*,然后加上最后一个字符串,在加上@和@后的字符串,这里记得先把所有字符串的字母变成小写字母。
如果是电话号码的时候,先判断有多少位数字,如果是数字个数大于10的话,则在最前面加一个+。这里可以采用倒序输出结果,先取数字的4位,然后加一个-,中间每加三个*,则添加一个-,直到有数字个数-4个*为止。
代码
class Solution { public String maskPII(String s) { int in[]={0,1,2,3,4,5,6,7,8,9}; String res=""; String res2=""; if(s. contains("@"))//邮箱 { String temp[]=s.split("@"); int len1=temp[0].length(); int len2=temp[1].length(); for(int i=0;i<len2;i++) { res2+=String.valueOf(temp[1].charAt(i)).toLowerCase(); } res=String.valueOf(temp[0].charAt(0)).toLowerCase()+"*****"+String.valueOf(temp[0].charAt(len1-1)).toLowerCase()+"@"+res2; } else{ // System.out.println("哈"); int len=s.length(); for(int i=0;i<len;i++) { for(int j=0;j<10;j++) { // System.out.println("哈1"); // System.out.println(s.charAt(i)); // System.out.println(Integer.toString(in[j])); if(String.valueOf(s.charAt(i)).equals(Integer.toString(in[j]))) { // System.out.println(s.charAt(i)); res2+=String.valueOf(s.charAt(i)); break; } } } // for(int i=res2.length()-5;i>=0;i--) // { // System.out.println(res2); if(res2.length()==10) { res+="***"+"-"+"***"+"-"+res2.substring(res2.length()-4,res2.length()); } if(res2.length()>10) {class Solution { public String maskPII(String s) { int in[]={0,1,2,3,4,5,6,7,8,9}; String res=""; String res2=""; if(s. contains("@"))//邮箱 { String temp[]=s.split("@"); int len1=temp[0].length(); int len2=temp[1].length(); for(int i=0;i<len2;i++) { res2+=String.valueOf(temp[1].charAt(i)).toLowerCase(); } res=String.valueOf(temp[0].charAt(0)).toLowerCase()+"*****"+String.valueOf(temp[0].charAt(len1-1)).toLowerCase()+"@"+res2; } else{ // System.out.println("哈"); int len=s.length(); for(int i=0;i<len;i++) { for(int j=0;j<10;j++) { // System.out.println("哈1"); // System.out.println(s.charAt(i)); // System.out.println(Integer.toString(in[j])); if(String.valueOf(s.charAt(i)).equals(Integer.toString(in[j]))) { // System.out.println(s.charAt(i)); res2+=String.valueOf(s.charAt(i)); break; } } } // for(int i=res2.length()-5;i>=0;i--) // { // System.out.println(res2); if(res2.length()==10) { res+="***"+"-"+"***"+"-"+res2.substring(res2.length()-4,res2.length()); } if(res2.length()>10) { String str=""; for(int i=10;i<res2.length();i++) { str+="*"; } res+="+"+str+"-"+"***"+"-"+"***"+"-"+res2.substring(res2.length()-4,res2.length()); } // } } return res; } }
结果