使用已定义的替换编号替换所有Java

使用已定义的替换编号替换所有Java,java,regex,string,replaceall,Java,Regex,String,Replaceall,我有一个电子邮件屏蔽的方法。我需要在@用星星签名之前替换电子邮件中的字母。但问题是总有5颗星,第一个和最后一个元素不应该被隐藏。 示例输入为:someemail@gmail.com。输出:s*****l@gmail.com 因此,电子邮件中的第一个和最后一个字符之间有多少个字符并不重要。这是我的密码: public static String maskEmail(String inputEmail){ return inputEmail.replaceAll("(?<=.).(?=

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

public static String maskEmail(String inputEmail){
    return inputEmail.replaceAll("(?<=.).(?=[^@]*?.@)", "*");
}
publicstaticstringmaskemail(字符串输入电子邮件){

return inputEmail.replaceAll((?只取第一个字母,并用五个星号和从
@
前面的字母开始的子字符串连接起来,会简单得多:

public static String maskEmail(String inputEmail) {
    return inputEmail.substring(0, 1) + 
           "*****" + 
           inputEmail.substring(inputEmail.indexOf('@') - 1);
}
这个怎么样:

inputEmail.replaceAll("(?<=^.).*(?=.@)", "*****")
请注意,仅当@前面至少有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
     }
 }
导入java.util.array;
公共类HelloWorld{
公共静态字符串strotasterisk(字符串电子邮件){
如果(email==null)返回“”;
int flag=email.indexOf(“@”);
如果(标志<0)返回“”;
StringBuilder sb=新的StringBuilder();
某人追加(email.charAt(0));
某人追加(“*******”);
sb.追加(电子邮件子字符串(标志-1));
使某人返回字符串();
}
公共静态void main(字符串[]args){
系统输出打印项次(星号(“someemail@gmail.com"));
//输入:someemail@gmail.com
//输出:s*****l@gmail.com
}
}

OP特别要求5颗星。比基于正则表达式的解决方案更容易阅读,效率更高。+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
     }
 }