2017-11-22 4 views
2

私は電子メールマスキングの方法を持っています。私は@の前に電子メールの文字を星と置き換える必要があります。しかし問題は、常に正確に5つの星があり、最初と最後の要素が隠されるべきではないということです。 サンプル入力は[email protected]となります。出力:s*****[email protected] したがって、電子メールの最初と最後の文字の間には何文字かは関係ありません。ここに私のコードです:ReplaceAllと定義済みの交換番号Java

public static String maskEmail(String inputEmail){ 
    return inputEmail.replaceAll("(?<=.).(?=[^@]*[email protected])", "*"); 
} 

私の方法はこの電子メールをマスクしますが、私は5つ星を正確に配置する方法がわかりません。

ちょうど5個のアスタリスクと @前の文字から始まる部分文字列でそれを最初の文字を取ると連結するはるかに簡単になり

答えて

5

public static String maskEmail(String inputEmail) { 
    return inputEmail.substring(0, 1) + 
      "*****" + 
      inputEmail.substring(inputEmail.indexOf('@') - 1); 
} 
+1

、ありがとう! – Cassie

+0

正規表現ベースのソリューションより読みやすく、効率的です。 +1 – ApproachingDarknessFish

3

これはどう:

inputEmail.replaceAll("(?<=^.).*([email protected])", "*****") 

または:

inputEmail.replaceAll("(.).*([email protected])", "$1*****$2") 

これは、 @の前に少なくとも2文字。

2

は、このコードを試してみてください。実際に

import java.util.Arrays; 

public class HelloWorld{ 

    public static String StrToAsterisk(String email){ 
     if (email == null) return ""; 

     int flag = email.indexOf("@"); 
     if (flag < 0) return ""; 

     StringBuilder sb = new StringBuilder(); 
     sb.append(email.charAt(0)); 
     sb.append("*****"); 
     sb.append(email.substring(flag-1)); 
     return sb.toString(); 
    } 

    public static void main(String []args){ 
     System.out.println(StrToAsterisk("[email protected]")); 
     //input : [email protected] 
     //output: s*****[email protected] 
    } 
} 
+0

OPには、特に5つの星が必要です。 – shmosel

+0

@shmosel、コードを修正しました、ありがとうございます。 – anto

関連する問題