替换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("(?!^).(?!$)","*");