替换不在给定正则表达式java中的字符串

替换不在给定正则表达式java中的字符串,java,regex,Java,Regex,我尝试替换给定正则表达式中找不到的字符串 Regex:(^.{1})|((.{1})(@.*]) 例如:如果给定的输入是dineshkani。n@gmail.com上述正则表达式将提取“d”n@gmail.com“。我尝试替换此正则表达式以外的字符。我试图得到d**********n@gmail.com 有没有办法换成这样 提前谢谢。为什么不把这些部件连接起来呢?在Java中,使用联接方法: String email=String.join(“****”,arrayOfSplits)能否使用正则

我尝试替换给定正则表达式中找不到的字符串

Regex:(^.{1})|((.{1})(@.*])

例如:如果给定的输入是
dineshkani。n@gmail.com
上述正则表达式将提取
“d”n@gmail.com“
。我尝试替换此正则表达式以外的字符。我试图得到
d**********n@gmail.com

有没有办法换成这样


提前谢谢。

为什么不把这些部件连接起来呢?在Java中,使用联接方法:


String email=String.join(“****”,arrayOfSplits)

能否使用正则表达式替换存在于两个定位点之间的字符?对

看看下面有用的资源

你在正确的道路上。您的模式应至少包含3个。第一个捕获组将是字符串中的第一个字符,即示例中的电子邮件地址。第二个捕获组是从位置2到
@
符号前倒数第二个位置的字符。第三组是其余的角色。以您的电子邮件为例:

     [d]              [ineshkani.]       [n@gmail.com]
Capture group 1 --- Capture group 2 --- Capture group 3
既然这些组被正确捕获,我们想对捕获组2执行一个替换,用一些模糊值替换每个字符,*例如。这将需要对第2组进行测试

([\w|\d]{1})  # This says match either a word or digit char occurring once
([\S]+)       # Match a non whitespace character with a greedy qualifier
(\S{1}\@\S+)  # Match a non whitespace character then an '@' then the rest of the characters until whitespace is found. 
现在,您需要在JavaReplace函数中使用对组2的反向引用。有关在捕获组上执行正则表达式替换的方法的示例,请参阅。您需要使用
.replaceAll()
并传递捕获组和替换字符串。 我希望这能帮助您解决问题,并理解在Java中使用正则表达式替换字符串时会发生什么


有关正则表达式的更多信息,请参阅正则表达式教程。

这可能更容易不使用
Regex

为什么不使用一个
StringBuilder
,只需从
1查看lastIndexOf(“@”)1
,并将字符设置为
*

String email = "dineshkani.n@gmail.com";
StringBuilder sb = new StringBuilder(email);
int mp = sb.lastIndexOf("@");

for (int i = 1; i < mp - 1; i++) {
    sb.setCharAt(i, '*');
}
String email=“dineshkani。n@gmail.com";
StringBuilder sb=新StringBuilder(电子邮件);
int mp=sb.lastIndexOf(“@”);
对于(int i=1;i
输出:

d**********n@gmail.com


注意:如评论中所述,如果电子邮件类似于
dn@gmail.com
,它将按原样打印

如果电子邮件是
dn@gmail.com
?可能
s.replaceAll((?或
\\G.(?!@)
包含两个字母的本地部分。试试这个我的坏@notyou,最好使用它