> For the complete documentation index, see [llms.txt](https://jaywin.gitbook.io/leetcode/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jaywin.gitbook.io/leetcode/solutions/0831-masking-personal-information.md).

# 0831. Masking Personal Information

<https://leetcode.com/problems/masking-personal-information>

## Description

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*.

**Email address:**

An email address is:

* 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).

To mask an email:

* 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.

To mask a phone number:

* 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".
```

**Example 4:**

```
**Input:** s = "86-(10)12345678"
**Output:** "+**-***-***-5678"
**Explanation:** s is a phone number.
There are 12 digits, so the local number is 10 digits and the country code is 2 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 `'+'`.

## ac

```java
```
