ReplaceAll用定义的替换号码Java

时间:2017-11-22 23:12:50

标签: java regex string replaceall

我有一种电子邮件屏蔽方法。我需要在用@星号签名之前替换电子邮件中的字母。但问题是总是应该有5颗星,并且不应该隐藏第一个和最后一个元素。 输入示例为:someemail@gmail.com。输出:s*****l@gmail.com 因此,电子邮件中第一个和最后一个字符之间的字符数无关紧要。这是我的代码:

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

我的方法掩盖了这封电子邮件,但问题是我不知道如何准确地放置5颗星。

3 个答案:

答案 0 :(得分:5)

只需取第一个字母并将其与五个星号和从@之前的字母开始的子字符串连接起来就会简单得多:

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

答案 1 :(得分:3)

这个怎么样:

inputEmail.replaceAll("(?<=^.).*(?=.@)", "*****")

或者这个:

inputEmail.replaceAll("(.).*(.@)", "$1*****$2")

请注意,这只适用于@。

之前至少有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("someemail@gmail.com"));
         //input : someemail@gmail.com
         //output: s*****l@gmail.com
     }
 }