我有一个字符串String email="rachitgulati26@gmail.com"
,所以它的长度是24。
我想要像rachit ************ il.com这样的结果。这意味着1/4的初始相同,最后1/4相同。
只想在regEX的帮助下将1/2从中间转换为*。
由于
答案 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
除非长度具有有限数量的值,否则您无法使用单个正则表达式识别字符串的中间部分。