有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有定义的替换编号Java的regex ReplaceAll

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

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

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


共 (3) 个答案

  1. # 1 楼答案

    请尝试以下代码:

    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
         }
     }
    
  2. # 2 楼答案

    这个怎么样:

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

    或者这个:

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

    请注意,这仅在@前面至少有2个字符时有效

  3. # 3 楼答案

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

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