替换字符串中的所有字母减去Java

时间:2015-06-08 16:31:00

标签: java android regex string

我有一个字符串,例如这个:

stackoverflow

我想在Java(Android)中获得以下输出:

s***********w

所以我们保留第一个和最后一个字母,但其他字母被这个符号“*”替换。我希望从输入到输出的字符串长度相同。

这是我现在拥有的功能的代码。

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;
}

我能够得到第一个和最后一个字母,但我真的不知道如何将“*”放在单词的中间。我知道我可以循环使用它,但这显然不是一个好的解决方案。

5 个答案:

答案 0 :(得分:9)

在一行正则表达式中,您可以这样做:

String str = "stackoverflow";
String repl = str.replaceAll("\\B\\w\\B", "*");
//=> s***********w

RegEx Demo

\B是零宽度断言,匹配\b不匹配的位置。这意味着它匹配除了第一个和最后一个字母之外的每个字母。

答案 1 :(得分:2)

char[] charArr = username.tocharArray();
for (int i=1;i<charArr.length - 1;i++) {
  charArr[i] = 'x';

}
username = new String(charArr);

答案 2 :(得分:2)

如果字符串也可以包含标点符号,请尝试:

str = str.replaceAll("(?!^).(?!$)","*");

lookarounds确保不在开始或结束时(regex101 demo)。

答案 3 :(得分:1)

尝试

String ast = "*";
String new_string = first_letter + StringUtils.repeat(ast, username_length-2) + last_letter;

答案 4 :(得分:0)

获取两个字符串变量中的第一个和最后一个字母以及&#39; *&#39;在一个字符串var。并从1循环到长度为2并在变量中追加*。然后最后追加这三个。