## Algorithm

Problem Name: 831. Masking Personal Information

You are given a personal information string `s`, representing either an email address or a phone number. Return the masked personal information using the below rules.

• A name consisting of uppercase and lowercase English letters, followed by
• The `'@'` symbol, followed by
• The domain consisting of uppercase and lowercase English letters with a dot `'.'` somewhere in the middle (not the first or last character).

• The uppercase letters in the name and domain must be converted to lowercase letters.
• The middle letters of the name (i.e., all but the first and last letters) must be replaced by 5 asterisks `"*****"`.

Phone number:

A phone number is formatted as follows:

• The phone number contains 10-13 digits.
• The last 10 digits make up the local number.
• The remaining 0-3 digits, in the beginning, make up the country code.
• Separation characters from the set `{'+', '-', '(', ')', ' '}` separate the above digits in some way.

• Remove all separation characters.
• The masked phone number should have the form:
• `"***-***-XXXX"` if the country code has 0 digits.
• `"+*-***-***-XXXX"` if the country code has 1 digit.
• `"+**-***-***-XXXX"` if the country code has 2 digits.
• `"+***-***-***-XXXX"` if the country code has 3 digits.
• `"XXXX"` is the last 4 digits of the local number.

Example 1:

```Input: s = "LeetCode@LeetCode.com"
Output: "l*****e@leetcode.com"
Explanation: s is an email address.
The name and domain are converted to lowercase, and the middle of the name is replaced by 5 asterisks.
```

Example 2:

```Input: s = "AB@qq.com"
Output: "a*****b@qq.com"
Explanation: s is an email address.
The name and domain are converted to lowercase, and the middle of the name is replaced by 5 asterisks.
Note that even though "ab" is 2 characters, it still must have 5 asterisks in the middle.
```

Example 3:

```Input: s = "1(234)567-890"
Output: "***-***-7890"
Explanation: s is a phone number.
There are 10 digits, so the local number is 10 digits and the country code is 0 digits.
Thus, the resulting masked number is "***-***-7890".
```

Constraints:

• `s` is either a valid email or a phone number.
• If `s` is an email:
• `8 <= s.length <= 40`
• `s` consists of uppercase and lowercase English letters and exactly one `'@'` symbol and `'.'` symbol.
• If `s` is a phone number:
• `10 <= s.length <= 20`
• `s` consists of digits, spaces, and the symbols `'('`, `')'`, `'-'`, and `'+'`.

## Code Examples

### #1 Code Example with Java Programming

```Code - Java Programming```

``````
class Solution {
}

StringBuilder digits = new StringBuilder();
for (char c : phoneNumber.toCharArray()) {
if (Character.isDigit(c)) {
digits.append(c);
}
}
return getMaskedAreaCode(digits.length()) + "***-***-" + digits.substring(digits.length() - 4);
}

return switch (phoneNumberLength) {
case 10 -> "";
case 11 -> "+*-";
case 12 -> "+**-";
case 13 -> "+***-";
default -> null;
};
}

String[] split = email.split("@");
String name = split;
String domain = split.toLowerCase();
String maskedName = Character.toLowerCase(name.charAt(0)) + String.join("", Collections.nCopies(5, "*"))
+ Character.toLowerCase(name.charAt(name.length() - 1));
return maskedName + "@" + domain;
}
}
``````
Copy The Code &

Input

cmd
s = "LeetCode@LeetCode.com"

Output

cmd
"l*****e@leetcode.com"

### #2 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
if "@" in S:
s = S.lower().split("@")
return s + "*" * 5 + s[-1] + "@" + s
else:
nums, tmp = {"0","1","2","3","4","5","6","7","8","9"}, ""
for c in S:
if c in nums: tmp += c
return "+" + "*" * (len(tmp) - 10) + "-***-***-" + tmp[-4:] if len(tmp) > 10 else "***-***-" + tmp[-4:]
``````
Copy The Code &

Input

cmd
s = "LeetCode@LeetCode.com"

Output

cmd
"l*****e@leetcode.com"