替换Java中字符串的所有字母,减去第一个和最后一个
我有一个字符串,例如:替换Java中字符串的所有字母,减去第一个和最后一个,java,android,regex,string,Java,Android,Regex,String,我有一个字符串,例如: stackoverflow 我想用Java(Android)获得以下输出: 因此,我们保留了第一个和最后一个字母,但其他字母被这个符号“*”替换。我希望字符串从输入到输出的长度相同 这是我现在拥有的函数的代码 String transform_username(String username) { // Get the length of the username int username_length = username.length();
stackoverflow
我想用Java(Android)获得以下输出:
因此,我们保留了第一个和最后一个字母,但其他字母被这个符号“*”替换。我希望字符串从输入到输出的长度相同
这是我现在拥有的函数的代码
String transform_username(String username)
{
// Get the length of the username
int username_length = username.length();
String first_letter = username.substring(0, 1);
String last_letter = username.substring(username_length - 1);
String new_string = "";
return new_string;
}
我能得到第一封和最后一封信,但我不知道如何把“*”放在单词的中间。我知道我可以循环使用它,但这显然不是一个好的解决方案;
char[] charArr = username.toCharArray();
for (int i=1;i<charArr.length - 1;i++) {
charArr[i] = 'x';
}
username = new String(charArr);
对于(inti=1;iTry
获取两个字符串变量中的第一个和最后一个字母,以及字符串变量中的“*”,并从1循环到长度-2,然后在变量中追加*。最后将这三个字母全部追加。在一行正则表达式中,您可以执行以下操作:
String str = "stackoverflow";
String repl = str.replaceAll("\\B\\w\\B", "*");
//=> s***********w
\B
是零宽度断言,它匹配\B
不匹配的位置。这意味着它匹配除第一个和最后一个之外的每个字母。如果字符串也可以包含标点符号,请尝试:
str = str.replaceAll("(?!^).(?!$)","*");
确保不在开头或结尾()。我相信你的意思是
StringUtils.repeat(ast,username\u length-2)
而不是ast.repeat(username\u length-2)
。嗯,StringUtils
是第三方库。不过这不是最好的解决方案。你现在不应该关心“坏”的问题解决方案。由于这项任务并不复杂,您应该实施您的解决方案,看看它是如何工作的。之后,您可以找到解决该任务的高级/更好的方法。
String str = "stackoverflow";
String repl = str.replaceAll("\\B\\w\\B", "*");
//=> s***********w
str = str.replaceAll("(?!^).(?!$)","*");