将中间子字符串转换为“*”

时间:2015-02-24 17:32:55

标签: java regex

我有一个字符串String email="rachitgulati26@gmail.com",所以它的长度是24。

我想要像rachit ************ il.com这样的结果。这意味着1/4的初始相同,最后1/4相同。

只想在regEX的帮助下将1/2从中间转换为*。

由于

3 个答案:

答案 0 :(得分:2)

你可以这样做:

"rachitgulati26@gmail.com".replaceAll("(?<=.{5}).(?=.{5})", "*");

除了第一个和最后一个5之外,这将把所有字符替换为*

回答你的问题,你可以这样灵活:

String email = "rachitgulati26@gmail.com";
int i = email.length() / 4;
email = email.replaceAll("(?<=.{" + i + "}).(?=.{" + i + "})", "*");

请注意,如果您要在生产代码中开始使用此功能,您可能希望根据i的值创建一种缓存这些正则表达式的方法。这种方式仅用于演示模式,并且每次使用时都会编译正则表达式Pattern

答案 1 :(得分:1)

一种方法是创建一个长度正确的'*'字符串,然后连接原始字符串的周围部分。这样你就不必做任何循环:

public static String starize(String str){
    char[] middle = new char[str.length()/2];
    Arrays.fill(middle, '*');
    return str.substring(0, str.length()/4) 
           + String.copyValueOf(middle) 
           + str.substring(3 * str.length() / 4);
}

答案 2 :(得分:1)

您可以转换为char数组,处理并转换回String:

String email = "rachitgulati26@gmail.com";
char[] a = email.toCharArray();
for (int i = 0, j = a.length >> 2; i < a.length >> 1; i++, j++)
    a[j] = '*';
email = new String(a);

结果:

rachit************il.com

除非长度具有有限数量的值,否则您无法使用单个正则表达式识别字符串的中间部分。