首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有定义替换号的ReplaceAll

具有定义替换号的ReplaceAll
EN

Stack Overflow用户
提问于 2017-11-22 23:12:50
回答 3查看 46关注 0票数 2

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

代码语言:javascript
复制
public static String maskEmail(String inputEmail){
    return inputEmail.replaceAll("(?<=.).(?=[^@]*?.@)", "*");
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-22 23:17:25

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

代码语言:javascript
复制
public static String maskEmail(String inputEmail) {
    return inputEmail.substring(0, 1) + 
           "*****" + 
           inputEmail.substring(inputEmail.indexOf('@') - 1);
}
票数 5
EN

Stack Overflow用户

发布于 2017-11-22 23:18:54

这个怎么样:

代码语言:javascript
复制
inputEmail.replaceAll("(?<=^.).*(?=.@)", "*****")

或者这个:

代码语言:javascript
复制
inputEmail.replaceAll("(.).*(.@)", "$1*****$2")

注意,只有在@之前至少有2个字符时,这才有效。

票数 3
EN

Stack Overflow用户

发布于 2017-11-22 23:44:41

试试下面的代码:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47445258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档